From af48b24458f76cb8a728d7ddfa3f025a1b5fb4cf Mon Sep 17 00:00:00 2001 From: ajcastro Date: Wed, 3 Jul 2019 11:09:31 +0800 Subject: [PATCH 01/39] Avoid overwriting existing select clause --- src/Searchable.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Searchable.php b/src/Searchable.php index 55124f6..bbe4b91 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -148,7 +148,9 @@ public function scopeSearch($query, $search) { $this->applySearchableJoins($query); - $query->select($this->getTable().'.*'); + if (empty($query->getQuery()->columns)) { + $query->select([$query->getQuery()->from.'.*']); + } $this->searchQuery()->setQuery($query)->search($search); } From a46417adca358d8166d9185a46a93394713b4a60 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Fri, 2 Aug 2019 16:24:45 +0800 Subject: [PATCH 02/39] Add enableSearchable(), disableSearchable() methods, Fix setSearchable() method, Fix SublimeSearch --- src/Search/SublimeSearch.php | 12 +++++++--- src/Searchable.php | 45 +++++++++++++++++++++++++++--------- 2 files changed, 43 insertions(+), 14 deletions(-) diff --git a/src/Search/SublimeSearch.php b/src/Search/SublimeSearch.php index 3cd1571..756da98 100644 --- a/src/Search/SublimeSearch.php +++ b/src/Search/SublimeSearch.php @@ -93,16 +93,22 @@ public function columnKeys() */ public function search($searchStr) { - $conditions = []; + $columnsToCompare = $this->columnsToCompare(); + $conditions = []; + $query = $this->query(); + + if (count($columnsToCompare) === 0) { + return $query; + } $parsedStr = $this->parseSearchStr($this->searchStr = $searchStr); - foreach ($this->columnsToCompare() as $column) { + foreach ($columnsToCompare as $column) { $conditions[] = $column.' like "'.$parsedStr.'"'; } $method = $this->searchOperator.'Raw'; - $query = $this->query()->{$method}('('.join(' OR ', $conditions).')'); + $query->{$method}('('.join(' OR ', $conditions).')'); if ($this->shouldSortByRelevance()) { $this->applySortByRelevance(); diff --git a/src/Searchable.php b/src/Searchable.php index bbe4b91..1f6ad29 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -10,6 +10,8 @@ trait Searchable { protected static $allSearchableColumns = []; + protected $searchableEnabled = true; + protected $sortByRelevance = true; protected $searchQuery; @@ -136,6 +138,28 @@ public function setSearchQuery($searchQuery) return $this; } + /** + * Disable searchable in the model. + * + * @return $this + */ + public function disableSearchable() + { + $this->searchableEnabled = false; + return $this; + } + + /** + * Enable searchable in the model. + * + * @return $this + */ + public function enableSearchable() + { + $this->searchableEnabled = true; + return $this; + } + /** * Apply search in the query. * @@ -146,6 +170,10 @@ public function setSearchQuery($searchQuery) */ public function scopeSearch($query, $search) { + if (!$this->searchableEnabled) { + return; + } + $this->applySearchableJoins($query); if (empty($query->getQuery()->columns)) { @@ -199,13 +227,8 @@ public function shouldSortByRelevance() */ public function setSearchable($config) { - if ($columns = array_get($config, 'columns')) { - $this->setSearchableColumns($columns); - } - - if ($joins = array_get($config, 'joins')) { - $this->setSearchableJoins($joins); - } + $this->setSearchableColumns(array_get($config, 'columns')); + $this->setSearchableJoins(array_get($config, 'joins')); return $this; } @@ -219,11 +242,11 @@ public function setSearchable($config) public function setSearchableColumns($columns) { if (property_exists($this, 'searchableColumns')) { - $this->searchableColumns = $columns; + $this->searchableColumns = $columns ?? []; } if (property_exists($this, 'searchable')) { - $this->searchable['columns'] = $columns; + $this->searchable['columns'] = $columns ?? []; } return $this; @@ -238,11 +261,11 @@ public function setSearchableColumns($columns) public function setSearchableJoins($joins) { if (property_exists($this, 'searchableJoins')) { - $this->searchableJoins = $joins; + $this->searchableJoins = $joins ?? []; } if (property_exists($this, 'searchable')) { - $this->searchable['joins'] = $joins; + $this->searchable['joins'] = $joins ?? []; } return $this; From 95f300599b618548f3fa71f25a8362ab4c6a9604 Mon Sep 17 00:00:00 2001 From: Arjon Jason Castro Date: Fri, 2 Aug 2019 16:40:26 +0800 Subject: [PATCH 03/39] Update README.md --- README.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 74e46fb..67dbc98 100644 --- a/README.md +++ b/README.md @@ -344,7 +344,7 @@ $results = [ ## Helper methods available on model -### isColumnValid +### isColumnValid [static] - Identifies if the column is a valid column, either a regular table column or derived column. - Useful for checking valid columns to avoid sql injection especially in `orderBy` query. @@ -353,7 +353,7 @@ $results = [ Post::isColumnValid(request('sort_by')); ``` -### getTableColumns +### getTableColumns [static] - Get the table columns. @@ -361,6 +361,38 @@ Post::isColumnValid(request('sort_by')); Post::getTableColumns(); ``` +### enableSearchable + +- Enable the searchable behavior. + +```php +$query->getModel()->enableSearchable(); +$query->search('foo'); +``` + +### disableSearchable + +- Disable the searchable behavior. +- Calling `search()` method will not perform a search. + +```php +$query->getModel()->disableSearchable(); +$query->search('foo'); +``` + +### setSearchable + +- Set or override the model's `$searchable` property. +- Useful for building searchable config on runtime. + +```php +$query->getModel()->setSearchable([ + 'columns' => ['title', 'status'], + 'joins' => [...], +]); +$query->search('foo'); +``` + ## Warning Calling `select()` after `search()` will overwrite `sort_index` field, so it is recommended to call `select()` From a7b1f37c54d8e8a36b21cff8f66d144675418542 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Tue, 8 Oct 2019 07:16:27 +0800 Subject: [PATCH 04/39] Add sortableColumns in Searchable --- src/BaseGridQuery.php | 3 +-- src/Searchable.php | 42 +++++++++++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/src/BaseGridQuery.php b/src/BaseGridQuery.php index 513900b..2a85a7b 100644 --- a/src/BaseGridQuery.php +++ b/src/BaseGridQuery.php @@ -102,7 +102,6 @@ public function setSelectQuery($query) public function getColumn($columnKey) { return $this->findColumn($this->columns(), $columnKey); - } /** @@ -112,7 +111,7 @@ public function getColumn($columnKey) * @param string $columnKey * @return string */ - public function findColumn($columns, $columnKey) + public static function findColumn($columns, $columnKey) { if (array_key_exists($columnKey, $columns)) { return $columns[$columnKey]; diff --git a/src/Searchable.php b/src/Searchable.php index 1f6ad29..4f20e5a 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -34,6 +34,24 @@ public function searchableColumns() return static::getTableColumns($this->getTable()); } + /** + * Return the sortable columns for this model's table. + * + * @return array + */ + public function sortableColumns() + { + if (property_exists($this, 'sortableColumns')) { + return $this->sortableColumns; + } + + if (property_exists($this, 'searchable') && array_key_exists('sortable_columns', $this->searchable)) { + return $this->searchable['sortable_columns']; + } + + return static::getTableColumns($this->getTable()); + } + /** * Get table columns. * @@ -61,15 +79,15 @@ public static function getTableColumns($table = null) public static function isColumnValid($column) { $model = new static; - $searchableColumns = $model->searchableColumns(); + $allColumns = array_merge($model->searchableColumns(), $model->sortableColumns()); - // Derived columns are a key in searchableColumns. - if (array_key_exists($column, $searchableColumns)) { + // Derived columns are a key in allColumns. + if (array_key_exists($column, $allColumns)) { return true; } - // Regular table column can be included in the searchableColumns. - if (in_array($column, $searchableColumns)) { + // Regular table column can be included in the allColumns. + if (in_array($column, $allColumns)) { return true; } @@ -77,6 +95,20 @@ public static function isColumnValid($column) return in_array($column, static::getTableColumns($model->getTable())); } + /** + * Get the actual sortable column. + * + * @param string $column + * @return string|mixed + */ + public static function getSortableColumn($column) + { + $model = new static; + $allColumns = array_merge($model->searchableColumns(), $model->sortableColumns()); + + return BaseGridQuery::findColumn($allColumns, $column); + } + /** * Return the searchable joins for the search query. * From 8a5e060a3fba5a218bec28973a56b7a3b234c6ce Mon Sep 17 00:00:00 2001 From: ajcastro Date: Tue, 8 Oct 2019 22:03:54 +0800 Subject: [PATCH 05/39] Explain sortable_columns in readme --- README.md | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 67dbc98..ca742d2 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,11 @@ class PostsController ->search(request('search')) ->when(Post::isColumnValid($sortColumn = request('sort_by')), function ($query) use ($sortColumn) { $query->orderBy( - \DB::raw(Post::searchQuery()->getColumn($sortColumn) ?? $sortColumn), + \DB::raw( + (new Post)->getSortableColumn($sortColumn) ?? // valid sortable column + (new Post)->searchQuery()->getColumn($sortColumn) ?? // valid search column + $sortColumn // valid original table column + ), request()->bool('descending') ? 'desc' : 'asc' ); }) @@ -167,6 +171,34 @@ $post->setSearchableJoins([ // addSearchableJoins() method is also available ]); ``` +### Easy Sortable Columns + +You can define columns to be only sortable but not be part of search query constraint. +Just put it under `sortable_columns` as shown below . +This column can be easily access to put in `orderBy` of query builder. All searchable columns are also sortable columns. + +```php +class Post { + protected $searchable = [ + 'columns' => [ + 'title' => 'posts.title', + ], + 'sortable_columns' => [ + 'status_name' => 'statuses.name', + ], + 'joins' => [ + 'statuses' => ['statuses.id', 'posts.status_id'] + ] + ]; +} + +// Usage + +Post::search('A post title')->orderBy(Post::getSortableColumn('status_name')); +// This will only perform search on `posts`.`title` column and it will append "order by `statuses`.`name`" in the query. +// This is beneficial if your column is mapped to a different column name coming from front-end request. +``` + ### Searchable Model Custom Search Query Sometimes our queries have lots of things and constraints to do and we can contain it in a search query class like this `PostSearch`. From d6fac2eafc9816168b20002035f3e417d2db46f3 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Tue, 8 Oct 2019 22:18:00 +0800 Subject: [PATCH 06/39] Add sortable_columns in setSearchable() and addSearchable() --- src/Searchable.php | 55 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/Searchable.php b/src/Searchable.php index 4f20e5a..fe346d7 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -261,6 +261,7 @@ public function setSearchable($config) { $this->setSearchableColumns(array_get($config, 'columns')); $this->setSearchableJoins(array_get($config, 'joins')); + $this->setSortableColumns(array_get($config, 'sortable_columns')); return $this; } @@ -303,6 +304,25 @@ public function setSearchableJoins($joins) return $this; } + /** + * Set sortable columns. + * + * @param array $columns + * @return $this + */ + public function setSortableColumns($columns) + { + if (property_exists($this, 'sortableColumns')) { + $this->sortableColumns = $columns ?? []; + } + + if (property_exists($this, 'searchable')) { + $this->searchable['sortable_columns'] = $columns ?? []; + } + + return $this; + } + /** * Add searchable. * @@ -319,23 +339,27 @@ public function addSearchable($config) $this->addSearchableJoins($joins); } + if ($columns = array_get($config, 'sortable_columns')) { + $this->addSortableColumns($columns); + } + return $this; } /** * Add searchable columns. * - * @param array $config + * @param array $columns * @return $this */ public function addSearchableColumns($columns) { if (property_exists($this, 'searchableColumns')) { - $this->searchableColumns = $columns + $this->searchableColumns; + $this->searchableColumns = array_merge($this->searchableColumns, $columns); } if (property_exists($this, 'searchable')) { - $this->searchable['columns'] = $columns + $this->searchable['columns']; + $this->searchable['columns'] = array_merge($this->searchable['columns'], $columns); } return $this; @@ -344,17 +368,36 @@ public function addSearchableColumns($columns) /** * Add searchable joins. * - * @param array $config + * @param array $joins * @return $this */ public function addSearchableJoins($joins) { if (property_exists($this, 'searchableJoins')) { - $this->searchableJoins = $joins + $this->searchableJoins; + $this->searchableJoins = array_merge($this->searchableJoins, $joins); + } + + if (property_exists($this, 'searchable')) { + $this->searchable['joins'] = array_merge($this->searchable['joins'], $joins); + } + + return $this; + } + + /** + * Add sortable columns. + * + * @param array $columns + * @return $this + */ + public function addSortableColumns($columns) + { + if (property_exists($this, 'sortableColumns')) { + $this->sortableColumns = array_merge($this->sortableColumns, $columns); } if (property_exists($this, 'searchable')) { - $this->searchable['joins'] = $joins + $this->searchable['joins']; + $this->searchable['sortable_columns'] = array_merge($this->searchable['sortable_columns'], $columns); } return $this; From b1468bf06d84f96ca8105ddcdc185c5616e131da Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sat, 11 Apr 2020 11:29:40 +0800 Subject: [PATCH 07/39] Parameterized join method --- README.md | 3 ++- src/Searchable.php | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ca742d2..b3970ae 100644 --- a/README.md +++ b/README.md @@ -106,7 +106,8 @@ class Post extends Model ], // This is needed if there is a need to join other tables for derived columns. 'joins' => [ - 'authors' => ['authors.id', 'posts.author_id'] + 'authors' => ['authors.id', 'posts.author_id'], // defaults to leftJoin method of eloquent builder + 'another_table' => ['another_table.id', 'authors.another_table_id', 'join'], // can pass leftJoin, rightJoin, join of eloquent builder. ] ]; diff --git a/src/Searchable.php b/src/Searchable.php index fe346d7..4dd2b96 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -136,7 +136,8 @@ public function searchableJoins() protected function applySearchableJoins($query) { foreach ($this->searchableJoins() as $table => $join) { - $query->leftJoin($table, $join[0], '=', $join[1]); + $joinMethod = $join[2] ?? 'leftJoin'; + $query->{$joinMethod}($table, $join[0], '=', $join[1]); } } From d06cda8243f42c682ec71962e017795de71ed32d Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 12 Apr 2020 11:35:06 +0800 Subject: [PATCH 08/39] Add exact search example --- README.md | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b3970ae..7ff1ef1 100644 --- a/README.md +++ b/README.md @@ -200,7 +200,7 @@ Post::search('A post title')->orderBy(Post::getSortableColumn('status_name')); // This is beneficial if your column is mapped to a different column name coming from front-end request. ``` -### Searchable Model Custom Search Query +### Custom Search Query Sometimes our queries have lots of things and constraints to do and we can contain it in a search query class like this `PostSearch`. @@ -260,6 +260,44 @@ We can also use custom search query temporarily by passing it as second paramete Post::search('William Shakespeare', new PostSearch)->paginate(); ``` +### Custom Search Query - Exact Search Example + +You can extend the class `AjCastro\Searchable\Search\SublimeSearch` a.k.a a fuzzy-search implementation. + +```php +namespace App; + +use AjCastro\Searchable\Search\SublimeSearch; + +class ExactSearch extends SublimeSearch +{ + /** + * {@inheritDoc} + */ + protected function parseSearchStr($searchStr) + { + return $searchStr; // produces "where `column` like '{$searchStr}'" + // or + return "%{$searchStr}%"; // produces "where `column` like '%{$searchStr}%'" + } +} +``` + +then use it in the model: + +```php + +namespace App; + +class User extends Model +{ + public function defaultSearchQuery() + { + return new ExactSearch($this, $this->searchableColumns(), $this->sortByRelevance, 'where'); + } +} +``` + ### Using derived columns for order by and where conditions Usually we have queries that has a derived columns like our example for `PostSearch`'s `author_full_name`. From c5a39af2ed134b27e0aa6331ba7b143a0742f7f0 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 12 Apr 2020 11:44:01 +0800 Subject: [PATCH 09/39] Update readme --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 7ff1ef1..ab561f3 100644 --- a/README.md +++ b/README.md @@ -298,6 +298,20 @@ class User extends Model } ``` +You may also check the build query by dd-ing it: + +```php + +$query = User::search('John Doe'); +dd($query->toSql()); +``` +which may output to +``` +select * from users where `column` like 'John Doe' +// or +select * from users where `column` like '%John Doe%' +``` + ### Using derived columns for order by and where conditions Usually we have queries that has a derived columns like our example for `PostSearch`'s `author_full_name`. From 36ae65bd04023a2b1e9db9613f0700b2ccb341d0 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 12 Apr 2020 12:07:55 +0800 Subject: [PATCH 10/39] Simplify readme --- README.md | 183 +++++------------------------------------------------- 1 file changed, 15 insertions(+), 168 deletions(-) diff --git a/README.md b/README.md index ab561f3..9992c53 100644 --- a/README.md +++ b/README.md @@ -200,65 +200,6 @@ Post::search('A post title')->orderBy(Post::getSortableColumn('status_name')); // This is beneficial if your column is mapped to a different column name coming from front-end request. ``` -### Custom Search Query - -Sometimes our queries have lots of things and constraints to do and we can contain it in a search query class like this `PostSearch`. - -```php -use AjCastro\Searchable\BaseSearchQuery; - -class PostSearch extends BaseSearchQuery -{ - public function query() - { - // The query conditions here is always applied to our search. - return $this->query - ->leftJoin('authors', 'authors.id', '=', 'posts.author_id') - ->where('posts.likes', '>', 100) - ->where('is_active', 1) - ->orderBy('some_column') - // We can even access our column definition here that will result to the equivalent actual column - // CAUTION: - // MySQL functions need to be wrapped with DB::raw() to be parsed properly. - // Also we can use orderByRaw() for this example. - // Also consider wrapping it in the columns() method so it will be ready - // everytime we use it in orderBy() or where() methods. - ->orderBy($this->author_full_name); - } - - public function columns() - { - return [ - 'posts.title', - 'posts.body', - // We wrap CONCAT() column so it will always be ready to be used in orderBy() and where() methods - 'author_full_name' => DB::raw('CONCAT(authors.first_name, " ", authors.last_name)') - ]; - } -} - -``` - -Then, we can use it as the default search query for the model like: - -```php -class Post -{ - public function defaultSearchQuery() - { - return new PostSearch; - } -} - -// Usage -Post::search($searchStr)->paginate(); -``` - -We can also use custom search query temporarily by passing it as second parameter in `search()` method. - -```php -Post::search('William Shakespeare', new PostSearch)->paginate(); -``` ### Custom Search Query - Exact Search Example @@ -286,7 +227,6 @@ class ExactSearch extends SublimeSearch then use it in the model: ```php - namespace App; class User extends Model @@ -301,7 +241,6 @@ class User extends Model You may also check the build query by dd-ing it: ```php - $query = User::search('John Doe'); dd($query->toSql()); ``` @@ -314,119 +253,14 @@ select * from users where `column` like '%John Doe%' ### Using derived columns for order by and where conditions -Usually we have queries that has a derived columns like our example for `PostSearch`'s `author_full_name`. +Usually we have queries that has a derived columns like our example for `Post`'s `author_full_name`. Sometimes we need to sort our query results by this column. ```php -// CAUTION: -// Remember to wrap column with MySQL functions with DB::raw() in column definition Post::search('Some search')->orderBy(Post::searchQuery()->author_full_name, 'desc')->paginate(); Post::search('Some search')->where(Post::searchQuery()->author_full_name, 'William%')->paginate(); ``` -### Running gridQuery and searchQuery on its own - -You can run gridQuery and searchQuery on its own but you need to make sure you initiliaze your query. - -```php -use AjCastro\Searchable\BaseSearchQuery; - -class PostSearch extends BaseSearchQuery -{ - public function query() - { - // Initialize query when $this->query is not available. - $query = $this->query ?? Post::query(); - return $this->query; - // ->leftJoin('authors', 'authors.id', '=', 'posts.author_id') - // -> ... and so on - } -} - -// Then you can run it... -(new PostSearch)->search('something')->paginate(); -``` - -### Grid Query Declarative Definition - -```php -use AjCastro\Searchable\BaseGridQuery; - -class PostGridQuery extends BaseGridQuery -{ - public function initQuery() - { - return Post::leftJoin('authors', 'authors.id', '=', 'posts.author_id'); - } - - public function columns() - { - return [ - 'posts.title', // same with 'title' => 'posts.title' - 'text' => 'posts.body', // will result to "posts.body as text" - 'author_full_name' => 'CONCAT(authors.first_name, " ", authors.last_name)' - ]; - } -} -``` - -```php -$gridQuery = new PostGridQuery; -$actualColumn = $gridQuery->getColumn('author_full_name'); -$actualColumn = $gridQuery->author_full_name; // or using magic getters -$gridQuery - ->selectColumns() // puts columns() to $query->select() and return the laravel query builder - ->orderBy($actualColumn, 'desc') - ->get(); -``` - -### Search Query Declarative Definition - -```php -use AjCastro\Searchable\BaseSearchQuery; - -class PostSearch extends BaseSearchQuery -{ - public function query() - { - // $this->query is available since this is set on Searchable trait scopeSearch() method - // If you're going to run this searchQuery on its own and not via scopeSearch() - // you should consider to initialize $this->query first or use initQuery() method instead of query() - // just like the above example - return $this->query->leftJoin('authors', 'authors.id', '=', 'posts.author_id'); - } - - public function columns() - { - return [ - 'posts.title', // same with 'title' => 'posts.title' - 'text' => 'posts.body', // will result to "posts.body as text" - 'author_full_name' => 'CONCAT(authors.first_name, " ", authors.last_name)' - ]; - } -} -``` - -```php -// All defined columns are searchable in the query -$searchQuery = new PostSearch; -$searchQuery->search('This is a post title.'); -$searchQuery->search('This is a post body.'); -$searchQuery->search('William Shakespeare'); -// You can chain laravel query builder's paginate() or get() afterwards -$searchQuery->search('William Shakespeare')->get(); -// If you want to select the columns from the columns() we call selectColumns(), use initQuery for this -$results = tap($searchQuery)->search('William Shakespeare')->selectColumns()->get(); -$results = [ - [ - 'title' => 'This is a post title', - 'text' => 'This is a post body.', - 'author_full_name' => 'William Shakespeare' - ], - // ... and so on -]; -``` - ## Helper methods available on model ### isColumnValid [static] @@ -478,10 +312,23 @@ $query->getModel()->setSearchable([ $query->search('foo'); ``` +### addSearchable + +- Add columns or joins in the model's `$searchable` property. +- Useful for building searchable config on runtime. + +```php +$query->getModel()->addSearchable([ + 'columns' => ['title', 'status'], + 'joins' => [...], +]); +$query->search('foo'); +``` + ## Warning Calling `select()` after `search()` will overwrite `sort_index` field, so it is recommended to call `select()` -before `search()` which is also the normal case. +before `search()`. ## Credits From 85af8c1d4df24fa927f057626cbcce42aebcb94b Mon Sep 17 00:00:00 2001 From: Arjon Jason Castro Date: Wed, 14 Oct 2020 19:44:07 +0800 Subject: [PATCH 11/39] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9992c53..f36cabd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Searchable -Full-text search and reusable queries in laravel. +Pattern matching search and reusable queries in laravel. - Currently supports MySQL only. - Helpful for complex table queries with multiple joins and derived columns. From bed04fc861edefd33345f39f6fef3688812f763a Mon Sep 17 00:00:00 2001 From: Arjon Jason Castro Date: Wed, 14 Oct 2020 19:47:36 +0800 Subject: [PATCH 12/39] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f36cabd..78e9450 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Pattern matching search and reusable queries in laravel. ## Overview -### Full-text search on eloquent models +### Pattern-matching search on eloquent models Simple setup for searchable model and can search on derived columns. @@ -43,7 +43,7 @@ Post::search("Some title or body content or even the author's full name") ->paginate(); ``` -Imagine we have an api for a table or list that has full-text searching and column sorting and pagination. +Imagine we have an api for a table or list that has searching and column sorting and pagination. This is a usual setup for a table or list. The internal explanations will be available on the documentation below. Our api call may look like this: From ed495740c0283f9ea49a6eb350f8cc70f3c89e15 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 01:46:46 +0800 Subject: [PATCH 13/39] Save --- .phpunit.result.cache | 1 + composer.json | 12 +- composer.lock | 6466 +++++++++++++++++++++++++++++++---------- phpunit.xml | 30 + src/Columns.php | 118 + src/ColumnsParsed.php | 133 + tests/ColumnsTest.php | 69 + 7 files changed, 5365 insertions(+), 1464 deletions(-) create mode 100644 .phpunit.result.cache create mode 100644 phpunit.xml create mode 100644 src/Columns.php create mode 100644 src/ColumnsParsed.php create mode 100644 tests/ColumnsTest.php diff --git a/.phpunit.result.cache b/.phpunit.result.cache new file mode 100644 index 0000000..dde56bf --- /dev/null +++ b/.phpunit.result.cache @@ -0,0 +1 @@ +{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.068,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.012,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.006}} \ No newline at end of file diff --git a/composer.json b/composer.json index a7b97a3..effbd25 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "ajcastro/searchable", - "description": "Full-text search and reusable queries in laravel.", - "keywords": ["laravel", "laravel-package", "query", "query-builder", "full-text-search", "eloquent-search", "grid"], + "description": "Pattern-matching search for Laravel eloquent models.", + "keywords": ["laravel", "laravel-package", "query", "query-builder", "patter-matching-search", "eloquent-search"], "license": "MIT", "authors": [ { @@ -17,8 +17,14 @@ "AjCastro\\Searchable\\": "src" } }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, "minimum-stability": "dev", "require-dev": { - "orchestra/testbench": "~3.0" + "orchestra/testbench": "^6.0", + "phpunit/phpunit": "9.5.x-dev" } } diff --git a/composer.lock b/composer.lock index 1913f87..630013f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,38 +4,99 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "766fc2da2c0f4056cdfa7a2b5c34294b", + "content-hash": "b462d7b20b885a7b7dbf2daeff60c7e1", "packages": [], "packages-dev": [ { - "name": "doctrine/inflector", - "version": "1.3.x-dev", + "name": "brick/math", + "version": "0.9.2", "source": { "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "45d9b132b262c1d03835cdeefd42938d881556fa" + "url": "https://github.com/brick/math.git", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", + "vimeo/psalm": "4.3.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.9.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/brick/math", + "type": "tidelift" + } + ], + "time": "2021-01-20T22:51:39+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/45d9b132b262c1d03835cdeefd42938d881556fa", - "reference": "45d9b132b262c1d03835cdeefd42938d881556fa", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/e04ff030d24a33edc2421bef305e32919dd78fc3", + "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^6.2" + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.14" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "Doctrine\\Common\\Inflector\\": "lib/Doctrine/Common/Inflector" + "Dflydev\\DotAccessData\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -44,17 +105,87 @@ ], "authors": [ { - "name": "Roman Borschel", - "email": "roman@code-factory.org" + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" }, { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.0" + }, + "time": "2021-01-01T22:08:42+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7", + "reference": "c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^8.2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, { "name": "Jonathan Wage", "email": "jonwage@gmail.com" @@ -64,47 +195,67 @@ "email": "schmittjoh@gmail.com" } ], - "description": "Common String Manipulations with regard to casing and singular/plural rules.", - "homepage": "http://www.doctrine-project.org", + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", "keywords": [ "inflection", - "pluralize", - "singularize", - "string" + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.1.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } ], - "time": "2018-06-15T19:03:38+00:00" + "time": "2020-10-28T16:09:51+00:00" }, { "name": "doctrine/instantiator", - "version": "dev-master", + "version": "1.5.x-dev", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "16ca33ecc67a625de250f476531dfe5de4c32ff2" + "reference": "6410c4b8352cb64218641457cef64997e6b784fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/16ca33ecc67a625de250f476531dfe5de4c32ff2", - "reference": "16ca33ecc67a625de250f476531dfe5de4c32ff2", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6410c4b8352cb64218641457cef64997e6b784fb", + "reference": "6410c4b8352cb64218641457cef64997e6b784fb", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^5.0", + "doctrine/coding-standard": "^8.0", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13", - "phpstan/phpstan-shim": "^0.9.2", - "phpunit/phpunit": "^7.0" + "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" @@ -118,7 +269,7 @@ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", - "homepage": "http://ocramius.github.com/" + "homepage": "https://ocramius.github.io/" } ], "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", @@ -127,34 +278,49 @@ "constructor", "instantiate" ], - "time": "2019-02-20T06:21:04+00:00" + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/1.4.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2020-11-10T19:05:51+00:00" }, { "name": "doctrine/lexer", - "version": "dev-master", + "version": "1.3.x-dev", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "4ab6ea7c838ccb340883fd78915af079949cc64d" + "reference": "59bfb3b9be04237be4cd1afea9bbb58794c25ce8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/4ab6ea7c838ccb340883fd78915af079949cc64d", - "reference": "4ab6ea7c838ccb340883fd78915af079949cc64d", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/59bfb3b9be04237be4cd1afea9bbb58794c25ce8", + "reference": "59bfb3b9be04237be4cd1afea9bbb58794c25ce8", "shasum": "" }, "require": { - "php": ">=5.3.2" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^4.5" + "doctrine/coding-standard": "^8.0", + "phpstan/phpstan": "^0.12", + "phpunit/phpunit": "^8.2 || ^9.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -165,14 +331,14 @@ "MIT" ], "authors": [ - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, { "name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com" }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, { "name": "Johannes Schmitt", "email": "schmittjoh@gmail.com" @@ -187,34 +353,54 @@ "parser", "php" ], - "time": "2018-10-21T19:22:05+00:00" + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/1.3.x" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2021-01-20T07:15:06+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "dev-master", + "version": "v3.1.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "714f6a8ab14b1951dcc2141b8e5d21ee96e06474" + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/714f6a8ab14b1951dcc2141b8e5d21ee96e06474", - "reference": "714f6a8ab14b1951dcc2141b8e5d21ee96e06474", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", "shasum": "" }, "require": { - "php": "^7.0" + "php": "^7.2|^8.0", + "webmozart/assert": "^1.7.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^6.4|^7.0" + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-webmozart-assert": "^0.12.7", + "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -225,11 +411,6 @@ "MIT" ], "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, { "name": "Chris Tankersley", "email": "chris@ctankersley.com", @@ -241,43 +422,55 @@ "cron", "schedule" ], - "time": "2019-02-14T15:33:25+00:00" + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2020-11-24T19:55:57+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.7", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", - "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", "shasum": "" }, "require": { "doctrine/lexer": "^1.0.1", - "php": ">= 5.5" + "php": ">=5.5", + "symfony/polyfill-intl-idn": "^1.10" }, "require-dev": { - "dominicsayers/isemail": "dev-master", - "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "dominicsayers/isemail": "^3.0.7", + "phpunit/phpunit": "^4.8.36|^7.5.15", "satooshi/php-coveralls": "^1.0.1" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "2.1.x-dev" } }, "autoload": { "psr-4": { - "Egulias\\EmailValidator\\": "EmailValidator" + "Egulias\\EmailValidator\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -298,33 +491,61 @@ "validation", "validator" ], - "time": "2018-12-04T22:38:24+00:00" + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2020-12-29T14:50:06+00:00" }, { - "name": "erusev/parsedown", - "version": "1.8.0-beta-5", + "name": "fakerphp/faker", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/erusev/parsedown.git", - "reference": "c26a2ee4bf8ba0270daab7da0353f2525ca6564a" + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/c26a2ee4bf8ba0270daab7da0353f2525ca6564a", - "reference": "c26a2ee4bf8ba0270daab7da0353f2525ca6564a", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834", + "reference": "f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=5.3.0" + "php": "^7.1 || ^8.0", + "psr/container": "^1.0", + "symfony/deprecation-contracts": "^2.2" + }, + "conflict": { + "fzaninotto/faker": "*" }, "require-dev": { - "phpunit/phpunit": "^4.8.35" + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." }, + "default-branch": true, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.15-dev" + } + }, "autoload": { - "psr-0": { - "Parsedown": "" + "psr-4": { + "Faker\\": "src/Faker/" } }, "notification-url": "https://packagist.org/downloads/", @@ -333,50 +554,125 @@ ], "authors": [ { - "name": "Emanuil Rusev", - "email": "hello@erusev.com", - "homepage": "http://erusev.com" + "name": "François Zaninotto" } ], - "description": "Parser for Markdown.", - "homepage": "http://parsedown.org", + "description": "Faker is a PHP library that generates fake data for you.", "keywords": [ - "markdown", - "parser" + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/main" + }, + "time": "2021-07-22T11:49:59+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "1.0.x-dev", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6", + "reference": "cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "phpoption/phpoption": "^1.7.3" + }, + "require-dev": { + "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } ], - "time": "2018-06-11T18:15:32+00:00" + "time": "2021-01-25T20:12:13+00:00" }, { - "name": "fzaninotto/faker", + "name": "guzzlehttp/psr7", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/fzaninotto/Faker.git", - "reference": "76b1c25e614c5e09adeb62f1b953536697a41a4b" + "url": "https://github.com/guzzle/psr7.git", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/76b1c25e614c5e09adeb62f1b953536697a41a4b", - "reference": "76b1c25e614c5e09adeb62f1b953536697a41a4b", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0" + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" }, "require-dev": { - "ext-intl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7", - "squizlabs/php_codesniffer": "^1.5" + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.9-dev" + "dev-master": "2.0-dev" } }, "autoload": { "psr-4": { - "Faker\\": "src/Faker/" + "GuzzleHttp\\Psr7\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -385,16 +681,36 @@ ], "authors": [ { - "name": "François Zaninotto" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], - "description": "Faker is a PHP library that generates fake data for you.", + "description": "PSR-7 message implementation that also provides common utility methods", "keywords": [ - "data", - "faker", - "fixtures" + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" ], - "time": "2019-01-09T06:29:58+00:00" + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.0.0" + }, + "time": "2021-06-30T20:03:07+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -402,16 +718,16 @@ "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "a8c1c7b982c989ad16c8f17f1834fa5df744b689" + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/a8c1c7b982c989ad16c8f17f1834fa5df744b689", - "reference": "a8c1c7b982c989ad16c8f17f1834fa5df744b689", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", "shasum": "" }, "require": { - "php": "^5.3|^7.0" + "php": "^5.3|^7.0|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -419,14 +735,14 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4", - "phpunit/phpunit": ">=4.8.35 <5|>=5.4.3 <6", - "satooshi/php-coveralls": "^1.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.1-dev" } }, "autoload": { @@ -442,58 +758,68 @@ "keywords": [ "test" ], - "time": "2018-11-01T08:19:18+00:00" + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" }, { "name": "laravel/framework", - "version": "dev-master", + "version": "8.x-dev", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "9f722df5769f8a73edbd96e14cd609c8ff661442" + "reference": "6e9baa07af67f2ae44127ef7e93762f3fd42868f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/9f722df5769f8a73edbd96e14cd609c8ff661442", - "reference": "9f722df5769f8a73edbd96e14cd609c8ff661442", + "url": "https://api.github.com/repos/laravel/framework/zipball/6e9baa07af67f2ae44127ef7e93762f3fd42868f", + "reference": "6e9baa07af67f2ae44127ef7e93762f3fd42868f", "shasum": "" }, "require": { - "doctrine/inflector": "^1.1", - "dragonmantank/cron-expression": "^2.0", - "egulias/email-validator": "^2.0", - "erusev/parsedown": "^1.7", + "doctrine/inflector": "^1.4|^2.0", + "dragonmantank/cron-expression": "^3.0.2", + "egulias/email-validator": "^2.1.10", "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "^1.0.8", - "monolog/monolog": "^1.12", - "nesbot/carbon": "^1.26.3 || ^2.0", - "opis/closure": "^3.1", - "php": "^7.2", + "league/commonmark": "^1.3|^2.0", + "league/flysystem": "^1.1", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.31", + "opis/closure": "^3.6", + "php": "^7.3|^8.0", "psr/container": "^1.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^3.7", + "ramsey/uuid": "^4.0", "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^4.2", - "symfony/debug": "^4.2", - "symfony/finder": "^4.2", - "symfony/http-foundation": "^4.2", - "symfony/http-kernel": "^4.2", - "symfony/process": "^4.2", - "symfony/routing": "^4.2", - "symfony/var-dumper": "^4.2", - "tijsverkoyen/css-to-inline-styles": "^2.2.1", - "vlucas/phpdotenv": "^3.3" + "symfony/console": "^5.1.4", + "symfony/error-handler": "^5.1.4", + "symfony/finder": "^5.1.4", + "symfony/http-foundation": "^5.1.4", + "symfony/http-kernel": "^5.1.4", + "symfony/mime": "^5.1.4", + "symfony/process": "^5.1.4", + "symfony/routing": "^5.1.4", + "symfony/var-dumper": "^5.1.4", + "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "vlucas/phpdotenv": "^5.2", + "voku/portable-ascii": "^1.4.8" }, "conflict": { "tightenco/collect": "<5.5.33" }, + "provide": { + "psr/container-implementation": "1.0" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", "illuminate/bus": "self.version", "illuminate/cache": "self.version", + "illuminate/collections": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", "illuminate/container": "self.version", @@ -506,6 +832,7 @@ "illuminate/hashing": "self.version", "illuminate/http": "self.version", "illuminate/log": "self.version", + "illuminate/macroable": "self.version", "illuminate/mail": "self.version", "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", @@ -515,61 +842,73 @@ "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", + "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/dbal": "^2.6", - "filp/whoops": "^2.1.4", - "guzzlehttp/guzzle": "^6.3", + "aws/aws-sdk-php": "^3.155", + "doctrine/dbal": "^2.6|^3.0", + "filp/whoops": "^2.8", + "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.0", - "moontoast/math": "^1.1", - "orchestra/testbench-core": "3.9.*", + "mockery/mockery": "^1.4.2", + "orchestra/testbench-core": "^6.23", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^7.5|^8.0", - "predis/predis": "^1.1.1", - "symfony/css-selector": "^4.2", - "symfony/dom-crawler": "^4.2", - "true/punycode": "^2.1" + "phpunit/phpunit": "^8.5.8|^9.3.3", + "predis/predis": "^1.1.2", + "symfony/cache": "^5.1.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver and SES mail driver (^3.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", "ext-pcntl": "Required to use all features of the queue worker.", "ext-posix": "Required to use all features of the queue worker.", - "filp/whoops": "Required for friendly error pages in development (^2.1.4).", - "fzaninotto/faker": "Required to use the eloquent factory builder (^1.4).", - "guzzlehttp/guzzle": "Required to use the Mailgun and Mandrill mail drivers and the ping methods on schedules (^6.0).", - "laravel/tinker": "Required to use the tinker console command (^1.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.8).", + "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-rackspace": "Required to use the Flysystem Rackspace driver (^1.0).", "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "moontoast/math": "Required to use ordered UUIDs (^1.1).", - "nexmo/client": "Required to use the Nexmo transport (^1.0).", + "mockery/mockery": "Required to use mocking (^1.4.2).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "predis/predis": "Required to use the redis cache and queue drivers (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^3.0).", - "symfony/css-selector": "Required to use some of the crawler integration testing tools (^4.2).", - "symfony/dom-crawler": "Required to use most of the crawler integration testing tools (^4.2).", - "symfony/psr-http-message-bridge": "Required to psr7 bridging features (^1.1)." - }, + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).", + "predis/predis": "Required to use the predis connector (^1.1.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", + "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." + }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.9-dev" + "dev-master": "8.x-dev" } }, "autoload": { "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { - "Illuminate\\": "src/Illuminate/" + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/" + ] } }, "notification-url": "https://packagist.org/downloads/", @@ -588,47 +927,246 @@ "framework", "laravel" ], - "time": "2019-02-21T11:07:09+00:00" + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2021-07-23T13:09:12+00:00" }, { - "name": "league/flysystem", - "version": "dev-master", + "name": "league/commonmark", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "0a342db3a10cb31862e83d550f67c2d087825467" + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "61f4efe57db6b8c02a1470dd0894fbacf23ef19b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/0a342db3a10cb31862e83d550f67c2d087825467", - "reference": "0a342db3a10cb31862e83d550f67c2d087825467", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/61f4efe57db6b8c02a1470dd0894fbacf23ef19b", + "reference": "61f4efe57db6b8c02a1470dd0894fbacf23ef19b", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "php": ">=5.5.9" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "ext-mbstring": "*", + "league/config": "^1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/polyfill-php80": "^1.15" }, "require-dev": { - "phpspec/phpspec": "^3.4", - "phpunit/phpunit": "^5.7.10" + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4", + "phpstan/phpstan": "^0.12.88", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" }, "suggest": { - "ext-fileinfo": "Required for MimeType", - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.1-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", + "type": "custom" + }, + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://www.patreon.com/colinodell", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2021-07-17T17:20:25+00:00" + }, + { + "name": "league/config", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/20d42d88f12a76ff862e17af4f14a5a4bbfd0925", + "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.90", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2021-06-19T15:52:37+00:00" + }, + { + "name": "league/flysystem", + "version": "1.x-dev", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/mime-type-detection": "^1.3", + "php": "^7.2.5 || ^8.0" + }, + "conflict": { + "league/flysystem-sftp": "<1.0.6" + }, + "require-dev": { + "phpspec/prophecy": "^1.11.1", + "phpunit/phpunit": "^8.5.8" + }, + "suggest": { + "ext-ftp": "Allows you to use FTP server storage", + "ext-openssl": "Allows you to use FTPS server storage", + "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", + "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", + "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", + "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", + "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", + "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", + "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", + "league/flysystem-webdav": "Allows you to use WebDAV storage", + "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", + "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" }, "type": "library", @@ -672,34 +1210,104 @@ "sftp", "storage" ], - "time": "2019-02-14T07:18:57+00:00" + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/1.x" + }, + "funding": [ + { + "url": "https://offset.earth/frankdejonge", + "type": "other" + } + ], + "time": "2021-06-23T21:56:05+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.7.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^2.18", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2021-01-18T20:58:21+00:00" }, { "name": "mockery/mockery", - "version": "1.2.2", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2" + "reference": "ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", - "reference": "0eb0b48c3f07b3b89f5169ce005b7d05b18cf1d2", + "url": "https://api.github.com/repos/mockery/mockery/zipball/ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3", + "reference": "ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3", "shasum": "" }, "require": { - "hamcrest/hamcrest-php": "~2.0", + "hamcrest/hamcrest-php": "^2.0.1", "lib-pcre": ">=7.0", - "php": ">=5.6.0" + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" }, "require-dev": { - "phpunit/phpunit": "~5.7.10|~6.5|~7.0|~8.0" + "phpunit/phpunit": "^8.5 || ^9.3" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.4.x-dev" } }, "autoload": { @@ -737,25 +1345,29 @@ "test double", "testing" ], - "time": "2019-02-13T09:37:52+00:00" + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/master" + }, + "time": "2021-07-19T08:40:21+00:00" }, { "name": "monolog/monolog", - "version": "1.x-dev", + "version": "dev-main", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "4d5b7e6ba1127789c7ff59d6f762298eaa29787f" + "reference": "71312564759a7db5b789296369c1a264efc43aad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/4d5b7e6ba1127789c7ff59d6f762298eaa29787f", - "reference": "4d5b7e6ba1127789c7ff59d6f762298eaa29787f", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", + "reference": "71312564759a7db5b789296369c1a264efc43aad", "shasum": "" }, "require": { - "php": ">=5.3.0", - "psr/log": "~1.0" + "php": ">=7.2", + "psr/log": "^1.0.1" }, "provide": { "psr/log-implementation": "1.0.0" @@ -763,33 +1375,38 @@ "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "graylog2/gelf-php": "~1.0", - "jakub-onderka/php-parallel-lint": "0.9", + "elasticsearch/elasticsearch": "^7", + "graylog2/gelf-php": "^1.4.2", + "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4", "php-console/php-console": "^3.1.3", - "phpunit/phpunit": "~4.5", - "phpunit/phpunit-mock-objects": "2.3.0", - "ruflin/elastica": ">=0.90 <3.0", - "sentry/sentry": "^0.13", + "phpspec/prophecy": "^1.6.1", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5", + "predis/predis": "^1.1", + "rollbar/rollbar": "^1.3", + "ruflin/elastica": ">=0.90 <7.0.1", "swiftmailer/swiftmailer": "^5.3|^6.0" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongo": "Allow sending log messages to a MongoDB server", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", "php-console/php-console": "Allow sending log messages to Google Chrome", "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "sentry/sentry": "Allow sending log messages to a Sentry server" + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -805,17 +1422,31 @@ { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "homepage": "https://seld.be" } ], "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "http://github.com/Seldaek/monolog", + "homepage": "https://github.com/Seldaek/monolog", "keywords": [ "log", "logging", "psr-3" ], - "time": "2018-12-26T14:24:03+00:00" + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.3.2" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2021-07-23T07:42:52+00:00" }, { "name": "myclabs/deep-copy", @@ -823,16 +1454,16 @@ "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", - "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", + "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.1 || ^8.0" }, "replace": { "myclabs/deep-copy": "self.version" @@ -842,6 +1473,7 @@ "doctrine/common": "^2.6", "phpunit/phpunit": "^7.1" }, + "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -863,40 +1495,68 @@ "object", "object graph" ], - "time": "2018-06-11T23:09:50+00:00" + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2020-11-13T09:40:50+00:00" }, { "name": "nesbot/carbon", - "version": "2.12.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "35dc8834ae9ad79b77c22d1e276fd838ca8c503d" + "reference": "dad1ee0c17daac295ab225bcc24a1a8f1582a40e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/35dc8834ae9ad79b77c22d1e276fd838ca8c503d", - "reference": "35dc8834ae9ad79b77c22d1e276fd838ca8c503d", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dad1ee0c17daac295ab225bcc24a1a8f1582a40e", + "reference": "dad1ee0c17daac295ab225bcc24a1a8f1582a40e", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1.8", - "symfony/translation": "^3.4 || ^4.0" + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0" }, "require-dev": { + "doctrine/orm": "^2.7", "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "phpmd/phpmd": "^2.6", - "phpstan/phpstan": "^0.10.8", - "phpunit/phpunit": "^7.1.5", + "kylekatarnls/multi-tester": "^2.0", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.54", + "phpunit/phpunit": "^7.5.20 || ^8.5.14", "squizlabs/php_codesniffer": "^3.4" }, + "default-branch": true, + "bin": [ + "bin/carbon" + ], "type": "library", "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] } }, "autoload": { @@ -912,237 +1572,458 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" } ], - "description": "A simple API extension for DateTime.", - "homepage": "http://carbon.nesbot.com", + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], - "time": "2019-02-06T21:23:55+00:00" + "support": { + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "type": "tidelift" + } + ], + "time": "2021-07-12T20:36:07+00:00" }, { - "name": "opis/closure", - "version": "dev-master", + "name": "nette/schema", + "version": "v1.2.1", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "41f5da65d75cf473e5ee582df8fc7f2c733ce9d6" + "url": "https://github.com/nette/schema.git", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/41f5da65d75cf473e5ee582df8fc7f2c733ce9d6", - "reference": "41f5da65d75cf473e5ee582df8fc7f2c733ce9d6", + "url": "https://api.github.com/repos/nette/schema/zipball/f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", + "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0" + "nette/utils": "^3.1.4 || ^4.0", + "php": ">=7.1 <8.1" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0|^5.0|^6.0|^7.0" + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^0.12", + "tracy/tracy": "^2.7" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "1.2-dev" } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" }, { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" + "config", + "nette" ], - "time": "2019-01-14T14:45:33+00:00" + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.1" + }, + "time": "2021-03-04T17:51:11+00:00" }, { - "name": "orchestra/testbench", - "version": "dev-master", + "name": "nette/utils", + "version": "v3.2.x-dev", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "d4ca70d6405c33b11a5430c6389e7e082265767d" + "url": "https://github.com/nette/utils.git", + "reference": "43fbb3419a6688d0bc21bfecb17f79a3e002ffc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/d4ca70d6405c33b11a5430c6389e7e082265767d", - "reference": "d4ca70d6405c33b11a5430c6389e7e082265767d", + "url": "https://api.github.com/repos/nette/utils/zipball/43fbb3419a6688d0bc21bfecb17f79a3e002ffc0", + "reference": "43fbb3419a6688d0bc21bfecb17f79a3e002ffc0", "shasum": "" }, "require": { - "laravel/framework": "~5.9.0", - "mockery/mockery": "^1.0", - "orchestra/testbench-core": "~3.9.0", - "php": ">=7.2", - "phpunit/phpunit": "^7.5 || ^8.0" + "php": ">=7.2 <8.1" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^0.12", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.9-dev" + "dev-master": "3.2-dev" } }, + "autoload": { + "classmap": [ + "src/" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" } ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" - ], - "time": "2019-02-13T00:32:22+00:00" + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v3.2" + }, + "time": "2021-06-28T13:14:58+00:00" }, { - "name": "orchestra/testbench-core", - "version": "dev-master", + "name": "nikic/php-parser", + "version": "v4.12.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "2c67e779baf60af96da0cfaaecfe2ed7e5b317f1" + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/2c67e779baf60af96da0cfaaecfe2ed7e5b317f1", - "reference": "2c67e779baf60af96da0cfaaecfe2ed7e5b317f1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", + "reference": "6608f01670c3cc5079e18c1dab1104e002579143", "shasum": "" }, "require": { - "fzaninotto/faker": "^1.4", - "php": ">=7.2" + "ext-tokenizer": "*", + "php": ">=7.0" }, "require-dev": { - "laravel/framework": "~5.9.0", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.0" - }, - "suggest": { - "laravel/framework": "Required for testing (~5.9.0).", - "mockery/mockery": "Allow to use Mockery for testing (^1.0).", - "orchestra/testbench-browser-kit": "Allow to use legacy Laravel BrowserKit for testing (^3.9).", - "orchestra/testbench-dusk": "Allow to use Laravel Dusk for testing (^3.9).", - "phpunit/phpunit": "Allow to use PHPUnit for testing (^7.5 || ^8.0)." + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, + "bin": [ + "bin/php-parse" + ], "type": "library", "extra": { "branch-alias": { - "dev-master": "3.9-dev" + "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { - "Orchestra\\Testbench\\": "src/" + "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" + "name": "Nikita Popov" } ], - "description": "Testing Helper for Laravel Development", - "homepage": "http://orchestraplatform.com/docs/latest/components/testbench/", + "description": "A PHP parser written in PHP", "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" + }, + "time": "2021-07-21T10:44:31+00:00" + }, + { + "name": "opis/closure", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/opis/closure.git", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", + "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "shasum": "" + }, + "require": { + "php": "^5.4 || ^7.0 || ^8.0" + }, + "require-dev": { + "jeremeamia/superclosure": "^2.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "Opis\\Closure\\": "src/" + }, + "files": [ + "functions.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marius Sarca", + "email": "marius.sarca@gmail.com" + }, + { + "name": "Sorin Sarca", + "email": "sarca_sorin@hotmail.com" + } + ], + "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", + "homepage": "https://opis.io/closure", + "keywords": [ + "anonymous functions", + "closure", + "function", + "serializable", + "serialization", + "serialize" + ], + "support": { + "issues": "https://github.com/opis/closure/issues", + "source": "https://github.com/opis/closure/tree/3.6.2" + }, + "time": "2021-04-09T13:42:10+00:00" + }, + { + "name": "orchestra/testbench", + "version": "6.x-dev", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench.git", + "reference": "4e3ee38295d793f0d4864203d5e1f0b952635d1b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/4e3ee38295d793f0d4864203d5e1f0b952635d1b", + "reference": "4e3ee38295d793f0d4864203d5e1f0b952635d1b", + "shasum": "" + }, + "require": { + "laravel/framework": "^8.26", + "mockery/mockery": "^1.4.2", + "orchestra/testbench-core": "^6.23", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^8.4 || ^9.3.3", + "spatie/laravel-ray": "^1.18" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "https://packages.tools/testbench/", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench/tree/v6.19.0" + }, + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://liberapay.com/crynobone", + "type": "liberapay" + } ], - "time": "2019-02-22T00:59:34+00:00" + "time": "2021-07-01T02:50:07+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.99", + "name": "orchestra/testbench-core", + "version": "6.x-dev", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95" + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "239bc0d99ae44f76c024e74ced0fc5aabfa00be3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", - "reference": "84b4dfb120c6f9b4ff7b3685f9b8f1aa365a0c95", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/239bc0d99ae44f76c024e74ced0fc5aabfa00be3", + "reference": "239bc0d99ae44f76c024e74ced0fc5aabfa00be3", "shasum": "" }, "require": { - "php": "^7" + "fakerphp/faker": "^1.9.1", + "php": "^7.3 || ^8.0", + "symfony/yaml": "^5.0", + "vlucas/phpdotenv": "^5.1" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" + "laravel/framework": "^8.26", + "laravel/laravel": "8.x-dev", + "mockery/mockery": "^1.4.2", + "orchestra/canvas": "^6.1", + "phpunit/phpunit": "^8.4 || ^9.3.3 || ^10.0", + "spatie/laravel-ray": "^1.7.1", + "symfony/process": "^5.0" }, "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." + "laravel/framework": "Required for testing (^8.26).", + "mockery/mockery": "Allow using Mockery for testing (^1.4.2).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^6.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^6.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^8.4|^9.3.3)." }, + "default-branch": true, + "bin": [ + "testbench" + ], "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "autoload": { + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" } ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench-core" + }, + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://liberapay.com/crynobone", + "type": "liberapay" + } ], - "time": "2018-07-02T15:55:56+00:00" + "time": "2021-07-14T02:34:48+00:00" }, { "name": "phar-io/manifest", @@ -1150,24 +2031,26 @@ "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", - "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { "ext-dom": "*", "ext-phar": "*", - "phar-io/version": "^2.0", - "php": "^5.6 || ^7.0" + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1197,24 +2080,28 @@ } ], "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "time": "2018-07-08T19:23:20+00:00" + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "2.0.1", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + "reference": "bae7c545bef187884426f042434e561ab1ddb182" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", - "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", + "reference": "bae7c545bef187884426f042434e561ab1ddb182", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -1244,39 +2131,38 @@ } ], "description": "Library for handling version information and constraints", - "time": "2018-07-08T19:19:57+00:00" + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.1.0" + }, + "time": "2021-02-23T14:00:09+00:00" }, { "name": "phpdocumentor/reflection-common", - "version": "1.0.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", - "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6", + "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6", "shasum": "" }, "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.6" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src" - ] + "phpDocumentor\\Reflection\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1298,44 +2184,46 @@ "reflection", "static analysis" ], - "time": "2017-09-11T18:02:19+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", + "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" + }, + "time": "2021-06-25T13:47:51+00:00" }, { "name": "phpdocumentor/reflection-docblock", - "version": "4.3.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + "reference": "8719cc12e2a57ec3432a76989bb4ef773ac75b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", - "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8719cc12e2a57ec3432a76989bb4ef773ac75b63", + "reference": "8719cc12e2a57ec3432a76989bb4ef773ac75b63", "shasum": "" }, "require": { - "php": "^7.0", - "phpdocumentor/reflection-common": "^1.0.0", - "phpdocumentor/type-resolver": "^0.4.0", - "webmozart/assert": "^1.0" + "ext-filter": "*", + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.3", + "webmozart/assert": "^1.9.1" }, "require-dev": { - "doctrine/instantiator": "~1.0.5", - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^6.4" + "mockery/mockery": "~1.3.2" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "5.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1346,44 +2234,51 @@ { "name": "Mike van Riel", "email": "me@mikevanriel.com" + }, + { + "name": "Jaap van Otterdijk", + "email": "account@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2017-11-30T07:14:17+00:00" + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" + }, + "time": "2021-04-23T09:50:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "0.4.0", + "version": "1.x-dev", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + "reference": "550e0fb7efa2f7a361d47ea1e30921989a43e41d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", - "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/550e0fb7efa2f7a361d47ea1e30921989a43e41d", + "reference": "550e0fb7efa2f7a361d47ea1e30921989a43e41d", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "phpdocumentor/reflection-common": "^1.0" + "php": "^7.2 || ^8.0", + "phpdocumentor/reflection-common": "^2.0" }, "require-dev": { - "mockery/mockery": "^0.9.4", - "phpunit/phpunit": "^5.2||^4.8.24" + "ext-tokenizer": "*", + "psalm/phar": "^4.8" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-1.x": "1.x-dev" } }, "autoload": { "psr-4": { - "phpDocumentor\\Reflection\\": [ - "src/" - ] + "phpDocumentor\\Reflection\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1396,47 +2291,58 @@ "email": "me@mikevanriel.com" } ], - "time": "2017-07-14T14:27:02+00:00" + "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "support": { + "issues": "https://github.com/phpDocumentor/TypeResolver/issues", + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x" + }, + "time": "2021-07-24T09:21:39+00:00" }, { "name": "phpoption/phpoption", - "version": "1.5.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed" + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/94e644f7d2051a5f0fcf77d81605f152eecff0ed", - "reference": "94e644f7d2051a5f0fcf77d81605f152eecff0ed", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", + "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": "^5.5.9 || ^7.0 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "4.7.*" + "bamarni/composer-bin-plugin": "^1.4.1", + "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.7-dev" } }, "autoload": { - "psr-0": { - "PhpOption\\": "src/" + "psr-4": { + "PhpOption\\": "src/PhpOption/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "Apache2" + "Apache-2.0" ], "authors": [ { "name": "Johannes M. Schmitt", "email": "schmittjoh@gmail.com" + }, + { + "name": "Graham Campbell", + "email": "graham@alt-three.com" } ], "description": "Option Type for PHP", @@ -1446,37 +2352,51 @@ "php", "type" ], - "time": "2015-07-25T16:39:46+00:00" + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2020-07-20T17:29:33+00:00" }, { "name": "phpspec/prophecy", - "version": "dev-master", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "7e272180527c34a97680de85eb5aba0847a664e0" + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/7e272180527c34a97680de85eb5aba0847a664e0", - "reference": "7e272180527c34a97680de85eb5aba0847a664e0", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", + "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.0.2", - "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", - "sebastian/comparator": "^1.1|^2.0|^3.0", - "sebastian/recursion-context": "^1.0|^2.0|^3.0" + "doctrine/instantiator": "^1.2", + "php": "^7.2 || ~8.0, <8.1", + "phpdocumentor/reflection-docblock": "^5.2", + "sebastian/comparator": "^3.0 || ^4.0", + "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^2.5|^3.2", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + "phpspec/phpspec": "^6.0", + "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.8.x-dev" + "dev-master": "1.11.x-dev" } }, "autoload": { @@ -1509,44 +2429,52 @@ "spy", "stub" ], - "time": "2018-12-18T15:40:51+00:00" + "support": { + "issues": "https://github.com/phpspec/prophecy/issues", + "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + }, + "time": "2021-03-17T13:42:18+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "dev-master", + "version": "9.2.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "cfca9c5f7f2694ca0c7749ffb142927d9f05250f" + "reference": "17fb4d4fcb09d120cbdd9641bc47163e3ed73371" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cfca9c5f7f2694ca0c7749ffb142927d9f05250f", - "reference": "cfca9c5f7f2694ca0c7749ffb142927d9f05250f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/17fb4d4fcb09d120cbdd9641bc47163e3ed73371", + "reference": "17fb4d4fcb09d120cbdd9641bc47163e3ed73371", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-xmlwriter": "*", - "php": "^7.2", - "phpunit/php-file-iterator": "^2.0.2", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-token-stream": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^1.0.1", - "sebastian/environment": "^4.1", - "sebastian/version": "^2.0.1", - "theseer/tokenizer": "^1.1" + "nikic/php-parser": "^4.10.2", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-xdebug": "^2.6.1" + "ext-pcov": "*", + "ext-xdebug": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -1572,32 +2500,42 @@ "testing", "xunit" ], - "time": "2019-02-15T13:40:27+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-07-24T15:03:19+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "dev-master", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "5e99c0ea25f1eb9bd4d7380499788302984dd77b" + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/5e99c0ea25f1eb9bd4d7380499788302984dd77b", - "reference": "5e99c0ea25f1eb9bd4d7380499788302984dd77b", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", + "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.1" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -1622,26 +2560,48 @@ "filesystem", "iterator" ], - "time": "2019-02-11T12:49:18+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:57:25+00:00" }, { - "name": "phpunit/php-text-template", - "version": "1.2.1", + "name": "phpunit/php-invoker", + "version": "3.1.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", - "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, "autoload": { "classmap": [ "src/" @@ -1658,37 +2618,47 @@ "role": "lead" } ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", "keywords": [ - "template" + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2015-06-21T13:50:34+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { - "name": "phpunit/php-timer", - "version": "dev-master", + "name": "phpunit/php-text-template", + "version": "2.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "eb9e39fb4c2034c31897cdb5f59498fc9126ddcc" + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/eb9e39fb4c2034c31897cdb5f59498fc9126ddcc", - "reference": "eb9e39fb4c2034c31897cdb5f59498fc9126ddcc", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -1707,38 +2677,47 @@ "role": "lead" } ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", "keywords": [ - "timer" + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-02-20T14:16:29+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { - "name": "phpunit/php-token-stream", - "version": "dev-master", + "name": "phpunit/php-timer", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/php-token-stream.git", - "reference": "cca9f57a2c7bb3d1e294f2aae84083ffe83dfa92" + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/cca9f57a2c7bb3d1e294f2aae84083ffe83dfa92", - "reference": "cca9f57a2c7bb3d1e294f2aae84083ffe83dfa92", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "ext-tokenizer": "*", - "php": "^7.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^7.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -1753,63 +2732,78 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Wrapper around PHP's tokenizer extension.", - "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", "keywords": [ - "tokenizer" + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-02-11T12:50:48+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "dev-master", + "version": "9.5.x-dev", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "efb5af42b4ad74b93f6bb0647695da903173ebc0" + "reference": "a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/efb5af42b4ad74b93f6bb0647695da903173ebc0", - "reference": "efb5af42b4ad74b93f6bb0647695da903173ebc0", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e", + "reference": "a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.1", + "doctrine/instantiator": "^1.3.1", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.7", - "phar-io/manifest": "^1.0.2", - "phar-io/version": "^2.0", - "php": "^7.2", - "phpspec/prophecy": "^1.7", - "phpunit/php-code-coverage": "^7.0", - "phpunit/php-file-iterator": "^2.0.1", - "phpunit/php-text-template": "^1.2.1", - "phpunit/php-timer": "^2.1", - "sebastian/comparator": "^3.0", - "sebastian/diff": "^3.0", - "sebastian/environment": "^4.1", - "sebastian/exporter": "^3.1", - "sebastian/global-state": "^3.0", - "sebastian/object-enumerator": "^3.0.3", - "sebastian/resource-operations": "^2.0", - "sebastian/version": "^2.0.1" - }, - "require-dev": { - "ext-pdo": "*" + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpspec/prophecy": "^1.12.1", + "phpunit/php-code-coverage": "^9.2.3", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.5", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.3", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^2.3.4", + "sebastian/version": "^3.0.2" + }, + "require-dev": { + "ext-pdo": "*", + "phpspec/prophecy-phpunit": "^2.0.1" }, "suggest": { "ext-soap": "*", - "ext-xdebug": "*", - "phpunit/php-invoker": "^2.0" + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -1817,12 +2811,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "8.1-dev" + "dev-master": "9.5-dev" } }, "autoload": { "classmap": [ "src/" + ], + "files": [ + "src/Framework/Assert/Functions.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1843,31 +2840,40 @@ "testing", "xunit" ], - "time": "2019-02-21T08:29:35+00:00" + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5" + }, + "funding": [ + { + "url": "https://phpunit.de/donate.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-07-24T14:55:07+00:00" }, { "name": "psr/container", - "version": "dev-master", + "version": "1.1.x-dev", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "014d250daebff39eba15ba990eeb2a140798e77c" + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/014d250daebff39eba15ba990eeb2a140798e77c", - "reference": "014d250daebff39eba15ba990eeb2a140798e77c", + "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", + "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, "autoload": { "psr-4": { "Psr\\Container\\": "src/" @@ -1880,7 +2886,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", @@ -1892,34 +2898,42 @@ "container-interop", "psr" ], - "time": "2018-12-29T15:36:03+00:00" + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/1.1.x" + }, + "time": "2021-03-05T17:36:06+00:00" }, { - "name": "psr/log", + "name": "psr/event-dispatcher", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "c4421fcac1edd5a324fda73e589a5cf96e52ffd0" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "aa4f89e91c423b516ff226c50dc83f824011c253" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/c4421fcac1edd5a324fda73e589a5cf96e52ffd0", - "reference": "c4421fcac1edd5a324fda73e589a5cf96e52ffd0", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/aa4f89e91c423b516ff226c50dc83f824011c253", + "reference": "aa4f89e91c423b516ff226c50dc83f824011c253", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.0" + }, + "suggest": { + "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1929,35 +2943,39 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", + "description": "Standard interfaces for event handling.", "keywords": [ - "log", + "events", "psr", - "psr-3" + "psr-14" ], - "time": "2018-11-21T13:42:00+00:00" + "support": { + "source": "https://github.com/php-fig/event-dispatcher/tree/master" + }, + "time": "2021-02-08T21:15:39+00:00" }, { - "name": "psr/simple-cache", + "name": "psr/http-factory", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "url": "https://github.com/php-fig/http-factory.git", + "reference": "36fa03d50ff82abcae81860bdaf4ed9a1510c7cd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/36fa03d50ff82abcae81860bdaf4ed9a1510c7cd", + "reference": "36fa03d50ff82abcae81860bdaf4ed9a1510c7cd", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.0.0", + "psr/http-message": "^1.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -1966,7 +2984,7 @@ }, "autoload": { "psr-4": { - "Psr\\SimpleCache\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1976,72 +2994,52 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], - "description": "Common interfaces for simple caching", + "description": "Common interfaces for PSR-7 HTTP message factories", "keywords": [ - "cache", - "caching", + "factory", + "http", + "message", "psr", - "psr-16", - "simple-cache" + "psr-17", + "psr-7", + "request", + "response" ], - "time": "2017-10-23T01:57:42+00:00" + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2020-09-17T16:52:55+00:00" }, { - "name": "ramsey/uuid", - "version": "3.x-dev", + "name": "psr/http-message", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "4c467ce4d5a72c3cf0832c813d4d84d222c3d4bb" + "url": "https://github.com/php-fig/http-message.git", + "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/4c467ce4d5a72c3cf0832c813d4d84d222c3d4bb", - "reference": "4c467ce4d5a72c3cf0832c813d4d84d222c3d4bb", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", + "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", "shasum": "" }, "require": { - "ext-json": "*", - "paragonie/random_compat": "^1.0|^2.0|9.99.99", - "php": "^5.4 || ^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "codeception/aspect-mock": "^1.0 | ~2.0.0", - "doctrine/annotations": "~1.2.0", - "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0", - "ircmaxell/random-lib": "^1.1", - "jakub-onderka/php-parallel-lint": "^0.9.0", - "mockery/mockery": "^0.9.9", - "moontoast/math": "^1.1", - "php-mock/php-mock-phpunit": "^0.3|^1.1", - "phpunit/phpunit": "^4.7|^5.0|^6.5", - "squizlabs/php_codesniffer": "^2.3" - }, - "suggest": { - "ext-ctype": "Provides support for PHP Ctype functions", - "ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator", - "ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator", - "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).", - "ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + "php": ">=5.3.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Ramsey\\Uuid\\": "src/" + "Psr\\Http\\Message\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -2050,343 +3048,367 @@ ], "authors": [ { - "name": "Marijn Huizendveld", - "email": "marijn.huizendveld@gmail.com" - }, - { - "name": "Thibaud Fabre", - "email": "thibaud@aztech.io" - }, - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).", - "homepage": "https://github.com/ramsey/uuid", + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ - "guid", - "identifier", - "uuid" + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" ], - "time": "2018-08-12T15:49:01+00:00" + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2019-08-29T13:16:46+00:00" }, { - "name": "sebastian/code-unit-reverse-lookup", - "version": "dev-master", + "name": "psr/log", + "version": "1.1.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "383c44e104c1fd46ecc915f55145bd2831318747" + "url": "https://github.com/php-fig/log.git", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/383c44e104c1fd46ecc915f55145bd2831318747", - "reference": "383c44e104c1fd46ecc915f55145bd2831318747", + "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", + "reference": "d49695b909c3b7628b6289db5479a1c204601f11", "shasum": "" }, "require": { - "php": "^5.6 || ^7.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7 || ^6.0" + "php": ">=5.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "time": "2019-02-11T12:48:46+00:00" + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/1.1.4" + }, + "time": "2021-05-03T11:20:27+00:00" }, { - "name": "sebastian/comparator", + "name": "psr/simple-cache", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "17ef3ffcdab9194ad7a2715a9fb1235f1361a366" + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/17ef3ffcdab9194ad7a2715a9fb1235f1361a366", - "reference": "17ef3ffcdab9194ad7a2715a9fb1235f1361a366", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474", + "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474", "shasum": "" }, "require": { - "php": "^7.1", - "sebastian/diff": "^3.0", - "sebastian/exporter": "^3.1" - }, - "require-dev": { - "phpunit/phpunit": "^7.1" + "php": ">=5.3.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", + "description": "Common interfaces for simple caching", "keywords": [ - "comparator", - "compare", - "equality" + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" ], - "time": "2019-02-11T12:51:04+00:00" + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/master" + }, + "time": "2020-04-21T06:43:17+00:00" }, { - "name": "sebastian/diff", - "version": "dev-master", + "name": "ralouphie/getallheaders", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "d4193340fc9bebb17533e00bc82f61da28fe7125" + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/d4193340fc9bebb17533e00bc82f61da28fe7125", - "reference": "d4193340fc9bebb17533e00bc82f61da28fe7125", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", "shasum": "" }, "require": { - "php": "^7.1" + "php": ">=5.6" }, "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.0", - "symfony/process": "^2 || ^3.3 || ^4" + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, "autoload": { - "classmap": [ - "src/" + "files": [ + "src/getallheaders.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "time": "2019-02-11T12:50:35+00:00" + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" }, { - "name": "sebastian/environment", - "version": "dev-master", + "name": "ramsey/collection", + "version": "1.1.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "dbf7b0d103084622e8a5015452a2650dcb248758" + "url": "https://github.com/ramsey/collection.git", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dbf7b0d103084622e8a5015452a2650dcb248758", - "reference": "dbf7b0d103084622e8a5015452a2650dcb248758", + "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", "shasum": "" }, "require": { - "php": "^7.1" + "php": "^7.2 || ^8" }, "require-dev": { - "phpunit/phpunit": "^7.5" - }, - "suggest": { - "ext-posix": "*" + "captainhook/captainhook": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "ergebnis/composer-normalize": "^2.6", + "fakerphp/faker": "^1.5", + "hamcrest/hamcrest-php": "^2", + "jangregor/phpstan-prophecy": "^0.8", + "mockery/mockery": "^1.3", + "phpstan/extension-installer": "^1", + "phpstan/phpstan": "^0.12.32", + "phpstan/phpstan-mockery": "^0.12.5", + "phpstan/phpstan-phpunit": "^0.12.11", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.4", + "slevomat/coding-standard": "^6.3", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.1-dev" - } - }, "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Ramsey\\Collection\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" } ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "description": "A PHP 7.2+ library for representing and manipulating collections.", "keywords": [ - "Xdebug", - "environment", - "hhvm" + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/1.1.3" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } ], - "time": "2019-02-11T12:51:52+00:00" + "time": "2021-01-21T17:40:04+00:00" }, { - "name": "sebastian/exporter", + "name": "ramsey/uuid", "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "8be786b3b65fbe706733d44a4b4a53d5391a4772" + "url": "https://github.com/ramsey/uuid.git", + "reference": "90a87a75432831ec4882ddea9cf49ee9127130ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/8be786b3b65fbe706733d44a4b4a53d5391a4772", - "reference": "8be786b3b65fbe706733d44a4b4a53d5391a4772", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/90a87a75432831ec4882ddea9cf49ee9127130ef", + "reference": "90a87a75432831ec4882ddea9cf49ee9127130ef", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/recursion-context": "^3.0" + "brick/math": "^0.8 || ^0.9", + "ext-json": "*", + "php": "^7.2 || ^8", + "ramsey/collection": "^1.0", + "symfony/polyfill-ctype": "^1.8" + }, + "replace": { + "rhumsaa/uuid": "self.version" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^6.0" + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "mockery/mockery": "^1.3", + "moontoast/math": "^1.1", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "1.0.0-alpha2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12", + "phpstan/phpstan-mockery": "^0.12", + "phpstan/phpstan-phpunit": "^0.12", + "phpunit/phpunit": "^8.5 || ^9", + "psy/psysh": "^0.10.0", + "slevomat/coding-standard": "^6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^3.18" }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-ctype": "Enables faster processing of character classification using ctype functions.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1.x-dev" + "dev-master": "4.x-dev" } }, "autoload": { - "classmap": [ - "src/" + "psr-4": { + "Ramsey\\Uuid\\": "src/" + }, + "files": [ + "src/functions.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], - "authors": [ - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - }, + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "homepage": "https://github.com/ramsey/uuid", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "rss": "https://github.com/ramsey/uuid/releases.atom", + "source": "https://github.com/ramsey/uuid" + }, + "funding": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://github.com/ramsey", + "type": "github" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" } ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "time": "2019-02-11T12:49:46+00:00" + "time": "2021-04-23T16:12:51+00:00" }, { - "name": "sebastian/global-state", - "version": "dev-master", + "name": "sebastian/cli-parser", + "version": "1.0.1", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "4b60cdb437ccff1871814451541cbe41f4b8ac58" + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/4b60cdb437ccff1871814451541cbe41f4b8ac58", - "reference": "4b60cdb437ccff1871814451541cbe41f4b8ac58", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": "^7.2", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3" }, "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^8.0" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -2401,42 +3423,48 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-02-11T12:52:08+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { - "name": "sebastian/object-enumerator", - "version": "dev-master", + "name": "sebastian/code-unit", + "version": "1.0.8", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "41af86e2a7b06e7e364c81a705b1f7caf6110218" + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/41af86e2a7b06e7e364c81a705b1f7caf6110218", - "reference": "41af86e2a7b06e7e364c81a705b1f7caf6110218", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": "^7.0", - "sebastian/object-reflector": "^1.1.1", - "sebastian/recursion-context": "^3.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -2451,37 +3479,48 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "time": "2019-02-11T12:50:05+00:00" + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" }, { - "name": "sebastian/object-reflector", - "version": "dev-master", + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "fae17b5d19ab523c9e821e5559d27e4c8a5bdee1" + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/fae17b5d19ab523c9e821e5559d27e4c8a5bdee1", - "reference": "fae17b5d19ab523c9e821e5559d27e4c8a5bdee1", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -2499,34 +3538,46 @@ "email": "sebastian@phpunit.de" } ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "time": "2019-02-11T12:48:12+00:00" + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" }, { - "name": "sebastian/recursion-context", - "version": "dev-master", + "name": "sebastian/comparator", + "version": "4.0.6", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "87b0893f697db6d75943e26d50bf91c82796a371" + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/87b0893f697db6d75943e26d50bf91c82796a371", - "reference": "87b0893f697db6d75943e26d50bf91c82796a371", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", + "reference": "55f4261989e546dc112258c7a75935a81a7ce382", "shasum": "" }, "require": { - "php": "^7.0" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^6.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2539,39 +3590,62 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, { "name": "Jeff Welch", "email": "whatthejeff@gmail.com" }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Volker Dusch", + "email": "github@wallbash.com" }, { - "name": "Adam Harvey", - "email": "aharvey@php.net" + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" } ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "time": "2019-02-11T12:48:28+00:00" + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:49:45+00:00" }, { - "name": "sebastian/resource-operations", - "version": "dev-master", + "name": "sebastian/complexity", + "version": "2.0.2", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", - "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "php": "^7.1" + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { @@ -2591,34 +3665,49 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "email": "sebastian@phpunit.de", + "role": "lead" } ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "time": "2018-10-04T04:07:39+00:00" + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" }, { - "name": "sebastian/version", - "version": "2.0.1", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", - "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=5.6" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2633,306 +3722,2135 @@ "authors": [ { "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "time": "2016-10-03T07:35:21+00:00" + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "swiftmailer/swiftmailer", - "version": "dev-master", + "name": "sebastian/environment", + "version": "5.1.3", "source": { "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "c2100aa5bf9acd57e712f208030f1e5e32e420c5" + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/c2100aa5bf9acd57e712f208030f1e5e32e420c5", - "reference": "c2100aa5bf9acd57e712f208030f1e5e32e420c5", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", + "reference": "388b6ced16caa751030f6a69e588299fa09200ac", "shasum": "" }, "require": { - "egulias/email-validator": "~2.0", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" + "php": ">=7.3" }, "require-dev": { - "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-intl": "Needed to support internationalized email addresses", - "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + "ext-posix": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "6.2-dev" + "dev-master": "5.1-dev" } }, "autoload": { - "files": [ - "lib/swift_required.php" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ - "email", - "mail", - "mailer" + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2019-01-30T06:37:50+00:00" + "time": "2020-09-28T05:52:38+00:00" }, { - "name": "symfony/console", - "version": "dev-master", + "name": "sebastian/exporter", + "version": "4.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "b32588547642e984501c5dfbd4a1e8c204786c20" + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/b32588547642e984501c5dfbd4a1e8c204786c20", - "reference": "b32588547642e984501c5dfbd4a1e8c204786c20", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8" - }, - "conflict": { - "symfony/dependency-injection": "<3.4", - "symfony/process": "<3.3" - }, - "provide": { - "psr/log-implementation": "1.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/event-dispatcher": "~3.4|~4.0", - "symfony/lock": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "4.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" } ], - "description": "Symfony Console Component", - "homepage": "https://symfony.com", - "time": "2019-02-19T18:29:52+00:00" + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:24:23+00:00" }, { - "name": "symfony/contracts", - "version": "dev-master", + "name": "sebastian/global-state", + "version": "5.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/contracts.git", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", - "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "psr/cache": "^1.0", - "psr/container": "^1.0" + "ext-dom": "*", + "phpunit/phpunit": "^9.3" }, "suggest": { - "psr/cache": "When using the Cache contracts", - "psr/container": "When using the Service contracts", - "symfony/cache-contracts-implementation": "", - "symfony/service-contracts-implementation": "", - "symfony/translation-contracts-implementation": "" + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Contracts\\": "" - }, - "exclude-from-classmap": [ - "**/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" } ], - "description": "A set of abstractions extracted out of the Symfony components", - "homepage": "https://symfony.com", + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } ], - "time": "2018-12-05T08:06:11+00:00" + "time": "2021-06-11T13:31:12+00:00" }, { - "name": "symfony/css-selector", - "version": "dev-master", + "name": "sebastian/lines-of-code", + "version": "1.0.3", "source": { "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d" + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d", - "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "php": "^7.1.3" + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-master": "1.0-dev" } }, "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", + "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:17:30+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "abandoned": true, + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "2.3.x-dev", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f24cbc541026c3bb7d27c647f0f9ea337135b22a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f24cbc541026c3bb7d27c647f0f9ea337135b22a", + "reference": "f24cbc541026c3bb7d27c647f0f9ea337135b22a", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/2.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-06-18T06:28:45+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", + "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-05-19T12:49:10+00:00" + }, + { + "name": "spatie/laravel-ray", + "version": "1.24.2", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ray.git", + "reference": "375881d1ec77a367cae75014a282e688666f51bc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/375881d1ec77a367cae75014a282e688666f51bc", + "reference": "375881d1ec77a367cae75014a282e688666f51bc", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/contracts": "^7.20|^8.19", + "illuminate/database": "^7.20|^8.19", + "illuminate/queue": "^7.20|^8.19", + "illuminate/support": "^7.20|^8.19", + "php": "^7.3|^8.0", + "spatie/backtrace": "^1.0", + "spatie/ray": "^1.27.1", + "symfony/stopwatch": "4.2|^5.1", + "zbateson/mail-mime-parser": "^1.3.1" + }, + "require-dev": { + "facade/ignition": "^2.5", + "guzzlehttp/guzzle": "^7.3", + "laravel/framework": "^7.20|^8.19", + "orchestra/testbench-core": "^5.0|^6.0", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelRay\\RayServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelRay\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily debug Laravel apps", + "homepage": "https://github.com/spatie/laravel-ray", + "keywords": [ + "laravel-ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-ray/issues", + "source": "https://github.com/spatie/laravel-ray/tree/1.24.2" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-07-23T16:50:57+00:00" + }, + { + "name": "spatie/macroable", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/macroable.git", + "reference": "7a99549fc001c925714b329220dea680c04bfa48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/macroable/zipball/7a99549fc001c925714b329220dea680c04bfa48", + "reference": "7a99549fc001c925714b329220dea680c04bfa48", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Macroable\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A trait to dynamically add methods to a class", + "homepage": "https://github.com/spatie/macroable", + "keywords": [ + "macroable", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/macroable/issues", + "source": "https://github.com/spatie/macroable/tree/1.0.1" + }, + "time": "2020-11-03T10:15:05+00:00" + }, + { + "name": "spatie/ray", + "version": "1.28.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ray.git", + "reference": "b800636fb022b93df53bd90fa52e5ed07221eb6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ray/zipball/b800636fb022b93df53bd90fa52e5ed07221eb6a", + "reference": "b800636fb022b93df53bd90fa52e5ed07221eb6a", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": "^7.3|^8.0", + "ramsey/uuid": "^3.0|^4.1", + "spatie/backtrace": "^1.1", + "spatie/macroable": "^1.0|^2.0", + "symfony/stopwatch": "^4.0|^5.1", + "symfony/var-dumper": "^4.2|^5.1" + }, + "require-dev": { + "illuminate/support": "6.x|^8.18", + "nesbot/carbon": "^2.43", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.9.16", + "spatie/phpunit-snapshot-assertions": "^4.2", + "spatie/test-time": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ray\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Debug with Ray to fix problems faster", + "homepage": "https://github.com/spatie/ray", + "keywords": [ + "ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/ray/issues", + "source": "https://github.com/spatie/ray/tree/1.28.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-07-04T13:21:04+00:00" + }, + { + "name": "swiftmailer/swiftmailer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/swiftmailer/swiftmailer.git", + "reference": "23e9ffaf6e8c716bce31bde1be708a405b1fbdf9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/23e9ffaf6e8c716bce31bde1be708a405b1fbdf9", + "reference": "23e9ffaf6e8c716bce31bde1be708a405b1fbdf9", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.0|^3.1", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "symfony/phpunit-bridge": "^4.4|^5.0" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.2-dev" + } + }, + "autoload": { + "files": [ + "lib/swift_required.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Corbyn" + }, + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Swiftmailer, free feature-rich PHP mailer", + "homepage": "https://swiftmailer.symfony.com", + "keywords": [ + "email", + "mail", + "mailer" + ], + "support": { + "issues": "https://github.com/swiftmailer/swiftmailer/issues", + "source": "https://github.com/swiftmailer/swiftmailer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", + "type": "tidelift" + } + ], + "time": "2021-04-10T06:08:01+00:00" + }, + { + "name": "symfony/console", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "c85b7001e8560e7e65978e93ec6e8d5b2bf453a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/c85b7001e8560e7e65978e93ec6e8d5b2bf453a8", + "reference": "c85b7001e8560e7e65978e93ec6e8d5b2bf453a8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:43:48+00:00" + }, + { + "name": "symfony/css-selector", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", + "reference": "7fb120adc7f600a59027775b224c13a33530dd90", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, { "name": "Jean-François Simon", "email": "jeanfrancois.simon@sensiolabs.com" }, { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:38:00+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/main" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/error-handler", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "3ad2107e2fdabfaee52b0d64f57695dfa408c2f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/3ad2107e2fdabfaee52b0d64f57695dfa408c2f3", + "reference": "3ad2107e2fdabfaee52b0d64f57695dfa408c2f3", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to manage errors and ease debugging PHP code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/error-handler/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:57+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "2eb48b003f7216ff7278cb48dc45d7cbec00f3ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eb48b003f7216ff7278cb48dc45d7cbec00f3ad", + "reference": "2eb48b003f7216ff7278cb48dc45d7cbec00f3ad", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/event-dispatcher-contracts": "^2", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/dependency-injection": "<4.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2", + "symfony/stopwatch": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:57+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "2.5.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-12T14:48:14+00:00" + }, + { + "name": "symfony/finder", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "26f71f3da2f83630986df0c2a520fa43c5673341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/26f71f3da2f83630986df0c2a520fa43c5673341", + "reference": "26f71f3da2f83630986df0c2a520fa43c5673341", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:57+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "2.5.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca", + "reference": "7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca", + "shasum": "" + }, + "require": { + "php": ">=7.2.5" + }, + "suggest": { + "symfony/http-client-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to HTTP clients", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/http-client-contracts/tree/2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-13T09:35:11+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "616e7c96a790c7a32435f3afc7788f620fec1cb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/616e7c96a790c7a32435f3afc7788f620fec1cb0", + "reference": "616e7c96a790c7a32435f3afc7788f620fec1cb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/mime": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:57+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc", + "reference": "aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2", + "symfony/http-foundation": "^5.3|^6.0", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.0", + "symfony/config": "<5.0", + "symfony/console": "<4.4", + "symfony/dependency-injection": "<5.3", + "symfony/doctrine-bridge": "<5.0", + "symfony/form": "<5.0", + "symfony/http-client": "<5.0", + "symfony/mailer": "<5.0", + "symfony/messenger": "<5.0", + "symfony/translation": "<5.0", + "symfony/twig-bridge": "<5.0", + "symfony/validator": "<5.0", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a structured process for converting a Request into a Response", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-kernel/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T10:05:29+00:00" + }, + { + "name": "symfony/mime", + "version": "5.4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05", + "reference": "ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<4.4" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/property-access": "^4.4|^5.1|^6.0", + "symfony/property-info": "^4.4|^5.1|^6.0", + "symfony/serializer": "^5.2|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T12:43:48+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", + "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "default-branch": true, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/main" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" } ], - "description": "Symfony CssSelector Component", - "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "time": "2021-05-27T12:26:48+00:00" }, { - "name": "symfony/debug", - "version": "dev-master", + "name": "symfony/polyfill-intl-idn", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/debug.git", - "reference": "4792c7baab24f95e8f0ec2da1145ff025c93cc73" + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/4792c7baab24f95e8f0ec2da1145ff025c93cc73", - "reference": "4792c7baab24f95e8f0ec2da1145ff025c93cc73", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", + "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0" - }, - "conflict": { - "symfony/http-kernel": "<3.4" + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" }, - "require-dev": { - "symfony/http-kernel": "~3.4|~4.0" + "suggest": { + "ext-intl": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Debug\\": "" + "Symfony\\Polyfill\\Intl\\Idn\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2941,62 +5859,87 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Debug Component", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", "homepage": "https://symfony.com", - "time": "2019-02-20T23:39:50+00:00" + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:27:20+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "dev-master", + "name": "symfony/polyfill-intl-normalizer", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "63dd1cfa74bff0c8ae596fb90a3a4511bd5cb84b" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/63dd1cfa74bff0c8ae596fb90a3a4511bd5cb84b", - "reference": "63dd1cfa74bff0c8ae596fb90a3a4511bd5cb84b", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", + "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0" - }, - "conflict": { - "symfony/dependency-injection": "<3.4" - }, - "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0" + "php": ">=7.1" }, "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "ext-intl": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3005,47 +5948,80 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony EventDispatcher Component", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:45+00:00" + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/finder", - "version": "dev-master", + "name": "symfony/polyfill-mbstring", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "7f64183e3ee0cda0644f31ed8f37f01e800af5e8" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/7f64183e3ee0cda0644f31ed8f37f01e800af5e8", - "reference": "7f64183e3ee0cda0644f31ed8f37f01e800af5e8", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", + "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.1" + }, + "suggest": { + "ext-mbstring": "For best performance" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Finder\\": "" + "Symfony\\Polyfill\\Mbstring\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3054,53 +6030,76 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Finder Component", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", - "time": "2019-01-16T21:53:39+00:00" + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/main" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T12:26:48+00:00" }, { - "name": "symfony/http-foundation", - "version": "dev-master", + "name": "symfony/polyfill-php72", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "046265438c0282cc9ac4a7f858b26470ca0f2984" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/046265438c0282cc9ac4a7f858b26470ca0f2984", - "reference": "046265438c0282cc9ac4a7f858b26470ca0f2984", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", + "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/mime": "^4.3", - "symfony/polyfill-mbstring": "~1.1" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/expression-language": "~3.4|~4.0" + "php": ">=7.1" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" + "Symfony\\Polyfill\\Php72\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3109,87 +6108,78 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpFoundation Component", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2019-01-29T09:50:57+00:00" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-05-27T09:17:38+00:00" }, { - "name": "symfony/http-kernel", - "version": "dev-master", + "name": "symfony/polyfill-php73", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "e2a7971b4be1c9b3dfaa24628466ccc90e9231bf" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e2a7971b4be1c9b3dfaa24628466ccc90e9231bf", - "reference": "e2a7971b4be1c9b3dfaa24628466ccc90e9231bf", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", + "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", "shasum": "" }, "require": { - "php": "^7.1.3", - "psr/log": "~1.0", - "symfony/contracts": "^1.0.2", - "symfony/debug": "~3.4|~4.0", - "symfony/event-dispatcher": "~4.1", - "symfony/http-foundation": "^4.1.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<4.2", - "symfony/translation": "<4.2", - "symfony/var-dumper": "<4.1.1", - "twig/twig": "<1.34|<2.4,>=2" - }, - "provide": { - "psr/log-implementation": "1.0" - }, - "require-dev": { - "psr/cache": "~1.0", - "symfony/browser-kit": "~3.4|~4.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/css-selector": "~3.4|~4.0", - "symfony/dependency-injection": "^4.2", - "symfony/dom-crawler": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/finder": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "symfony/routing": "~3.4|~4.0", - "symfony/stopwatch": "~3.4|~4.0", - "symfony/templating": "~3.4|~4.0", - "symfony/translation": "~4.2", - "symfony/var-dumper": "^4.1.1" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "", - "symfony/var-dumper": "" + "php": ">=7.1" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3198,50 +6188,78 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony HttpKernel Component", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", - "time": "2019-02-21T09:57:57+00:00" + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-02-19T12:13:01+00:00" }, { - "name": "symfony/mime", - "version": "dev-master", + "name": "symfony/polyfill-php80", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "7b7393521d94e7bc4ccd7ea2980320e2ec8b46cb" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "19d03c391c6abb6791f5f757fb36e551bffeaa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/7b7393521d94e7bc4ccd7ea2980320e2ec8b46cb", - "reference": "7b7393521d94e7bc4ccd7ea2980320e2ec8b46cb", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/19d03c391c6abb6791f5f757fb36e551bffeaa68", + "reference": "19d03c391c6abb6791f5f757fb36e551bffeaa68", "shasum": "" }, "require": { - "php": "^7.1.3" - }, - "require-dev": { - "symfony/dependency-injection": "~3.4|^4.1" + "php": ">=7.1" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Mime\\": "" + "Symfony\\Polyfill\\Php80\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3250,54 +6268,82 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "A ", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "mime", - "mime-type" + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/main" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-01-30T07:03:13+00:00" + "time": "2021-07-13T14:34:27+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "dev-master", + "name": "symfony/polyfill-php81", + "version": "dev-main", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "82ebae02209c21113908c229e9883c419720738a" + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "e66119f3de95efc359483f810c4c3e6436279436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a", - "reference": "82ebae02209c21113908c229e9883c419720738a", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", + "reference": "e66119f3de95efc359483f810c4c3e6436279436", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-ctype": "For best performance" + "php": ">=7.1" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Polyfill\\Php81\\": "" }, "files": [ "bootstrap.php" + ], + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3306,56 +6352,66 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "ctype", "polyfill", - "portable" + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2021-05-21T13:25:03+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "dev-master", + "name": "symfony/process", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7" + "url": "https://github.com/symfony/process.git", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", - "reference": "f037ea22acfaee983e271dd9c3b8bb4150bd8ad7", + "url": "https://api.github.com/repos/symfony/process/zipball/d16634ee55b895bd85ec714dadc58e4428ecf030", + "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030", "shasum": "" }, "require": { - "php": ">=5.3.3" - }, - "suggest": { - "ext-iconv": "For best performance" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" + "Symfony\\Component\\Process\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3364,59 +6420,82 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Iconv extension", + "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" + "support": { + "source": "https://github.com/symfony/process/tree/5.2" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2021-07-23T15:54:19+00:00" }, { - "name": "symfony/polyfill-intl-idn", - "version": "v1.10.0", + "name": "symfony/routing", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a" + "url": "https://github.com/symfony/routing.git", + "reference": "71ab665a95f412a46426e39930facaad8b789983" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/89de1d44f2c059b266f22c9cc9124ddc4cd0987a", - "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a", + "url": "https://api.github.com/repos/symfony/routing/zipball/71ab665a95f412a46426e39930facaad8b789983", + "reference": "71ab665a95f412a46426e39930facaad8b789983", "shasum": "" }, "require": { - "php": ">=5.3.3", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php72": "^1.9" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-php80": "^1.16" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", + "symfony/dependency-injection": "<4.4", + "symfony/yaml": "<4.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.3|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/yaml": "^4.4|^5.0|^6.0" }, "suggest": { - "ext-intl": "For best performance" + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.9-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" + "Symfony\\Component\\Routing\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3425,59 +6504,79 @@ ], "authors": [ { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "description": "Maps an HTTP request to a set of configuration variables", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2018-09-30T16:36:12+00:00" + "time": "2021-07-23T15:55:57+00:00" }, { - "name": "symfony/polyfill-mbstring", - "version": "dev-master", + "name": "symfony/service-contracts", + "version": "2.5.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "56b990c18120c91eaf0d38a93fabfa2a1f7fa413" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fe5e94c604826c35a32fa832f35bd036b6799609", - "reference": "fe5e94c604826c35a32fa832f35bd036b6799609", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/56b990c18120c91eaf0d38a93fabfa2a1f7fa413", + "reference": "56b990c18120c91eaf0d38a93fabfa2a1f7fa413", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2.5", + "psr/container": "^1.1" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { - "ext-mbstring": "For best performance" + "symfony/service-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] + "Symfony\\Contracts\\Service\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3493,46 +6592,60 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2021-07-13T09:35:11+00:00" }, { - "name": "symfony/polyfill-php72", - "version": "dev-master", + "name": "symfony/stopwatch", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c" + "url": "https://github.com/symfony/stopwatch.git", + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/ab50dcf166d5f577978419edd37aa2bb8eabce0c", - "reference": "ab50dcf166d5f577978419edd37aa2bb8eabce0c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b24c6a92c6db316fee69e38c80591e080e41536c", + "reference": "b24c6a92c6db316fee69e38c80591e080e41536c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2.5", + "symfony/service-contracts": "^1.0|^2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Component\\Stopwatch\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3541,56 +6654,73 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Provides a way to profile code", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "support": { + "source": "https://github.com/symfony/stopwatch/tree/5.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2021-07-10T08:58:57+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "dev-master", + "name": "symfony/string", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd" + "url": "https://github.com/symfony/string.git", + "reference": "c29a3e649843f4a34eaa4be2683f4914e8b7f023" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", - "reference": "d1fb4abcc0c47be136208ad9d68bf59f1ee17abd", + "url": "https://api.github.com/repos/symfony/string/zipball/c29a3e649843f4a34eaa4be2683f4914e8b7f023", + "reference": "c29a3e649843f4a34eaa4be2683f4914e8b7f023", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11-dev" - } + "require-dev": { + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, + "type": "library", "autoload": { "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Component\\String\\": "" }, "files": [ - "bootstrap.php" + "Resources/functions.php" ], - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3607,42 +6737,90 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-06T07:57:58+00:00" + "time": "2021-06-27T12:34:25+00:00" }, { - "name": "symfony/process", - "version": "dev-master", + "name": "symfony/translation", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "9a8319d32b6c338826f9181aadfa8865b31ed9f8" + "url": "https://github.com/symfony/translation.git", + "reference": "76def95773536a23b1f8caf69f5bdf56afda85a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9a8319d32b6c338826f9181aadfa8865b31ed9f8", - "reference": "9a8319d32b6c338826f9181aadfa8865b31ed9f8", + "url": "https://api.github.com/repos/symfony/translation/zipball/76def95773536a23b1f8caf69f5bdf56afda85a2", + "reference": "76def95773536a23b1f8caf69f5bdf56afda85a2", "shasum": "" }, "require": { - "php": "^7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation-contracts": "^2.3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } + "conflict": { + "symfony/config": "<4.4", + "symfony/dependency-injection": "<5.0", + "symfony/http-kernel": "<5.0", + "symfony/twig-bundle": "<5.0", + "symfony/yaml": "<4.4" + }, + "provide": { + "symfony/translation-implementation": "2.3" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.0|^6.0", + "symfony/intl": "^4.4|^5.0|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2", + "symfony/yaml": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" }, + "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "Symfony\\Component\\Process\\": "" + "Symfony\\Component\\Translation\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3662,62 +6840,61 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Process Component", + "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", - "time": "2019-01-24T22:35:38+00:00" + "support": { + "source": "https://github.com/symfony/translation/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-21T13:18:25+00:00" }, { - "name": "symfony/routing", - "version": "dev-master", + "name": "symfony/translation-contracts", + "version": "2.5.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "1d314e30c738d65bbb64c5cd08c426e8a5a10fb7" + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "6e2aa82901f45c38761ba61c1082584ae6f5dbda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1d314e30c738d65bbb64c5cd08c426e8a5a10fb7", - "reference": "1d314e30c738d65bbb64c5cd08c426e8a5a10fb7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/6e2aa82901f45c38761ba61c1082584ae6f5dbda", + "reference": "6e2aa82901f45c38761ba61c1082584ae6f5dbda", "shasum": "" }, "require": { - "php": "^7.1.3" - }, - "conflict": { - "symfony/config": "<4.2", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "require-dev": { - "doctrine/annotations": "~1.0", - "psr/log": "~1.0", - "symfony/config": "~4.2", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/expression-language": "~3.4|~4.0", - "symfony/http-foundation": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "php": ">=7.2.5" }, "suggest": { - "doctrine/annotations": "For using the annotation loader", - "symfony/config": "For using the all-in-one router or any loader", - "symfony/dependency-injection": "For loading routes from a service", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" + "symfony/translation-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.3-dev" + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Contracts\\Translation\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3725,74 +6902,88 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Routing Component", + "description": "Generic abstractions related to translation", "homepage": "https://symfony.com", "keywords": [ - "router", - "routing", - "uri", - "url" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-15T14:28:25+00:00" + "time": "2021-07-13T10:07:36+00:00" }, { - "name": "symfony/translation", - "version": "dev-master", + "name": "symfony/var-dumper", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "65d772fd969419e264d1721e7a10f7ccde35c17b" + "url": "https://github.com/symfony/var-dumper.git", + "reference": "d823bfe53ac483ce080b279c2a1e438f01130a01" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/65d772fd969419e264d1721e7a10f7ccde35c17b", - "reference": "65d772fd969419e264d1721e7a10f7ccde35c17b", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d823bfe53ac483ce080b279c2a1e438f01130a01", + "reference": "d823bfe53ac483ce080b279c2a1e438f01130a01", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/contracts": "^1.0.2", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=7.2.5", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/config": "<3.4", - "symfony/dependency-injection": "<3.4", - "symfony/yaml": "<3.4" - }, - "provide": { - "symfony/translation-contracts-implementation": "1.0" + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<4.4" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "~3.4|~4.0", - "symfony/console": "~3.4|~4.0", - "symfony/dependency-injection": "~3.4|~4.0", - "symfony/finder": "~2.8|~3.0|~4.0", - "symfony/intl": "~3.4|~4.0", - "symfony/yaml": "~3.4|~4.0" + "ext-iconv": "*", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/uid": "^5.1|^6.0", + "twig/twig": "^2.13|^3.0.4" }, "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" }, + "bin": [ + "Resources/bin/var-dump-server" + ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { + "files": [ + "Resources/functions/dump.php" + ], "psr-4": { - "Symfony\\Component\\Translation\\": "" + "Symfony\\Component\\VarDumper\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3804,67 +6995,76 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony Translation Component", + "description": "Provides mechanisms for walking through any arbitrary PHP variable", "homepage": "https://symfony.com", - "time": "2019-02-19T18:29:52+00:00" + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2021-07-23T15:55:57+00:00" }, { - "name": "symfony/var-dumper", - "version": "dev-master", + "name": "symfony/yaml", + "version": "5.4.x-dev", "source": { "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "1c4cb1b574ffe75c33c6c2f2cc71840155dd36f8" + "url": "https://github.com/symfony/yaml.git", + "reference": "1eb028d50c9aff8d1e1720301051c476def4be79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/1c4cb1b574ffe75c33c6c2f2cc71840155dd36f8", - "reference": "1c4cb1b574ffe75c33c6c2f2cc71840155dd36f8", + "url": "https://api.github.com/repos/symfony/yaml/zipball/1eb028d50c9aff8d1e1720301051c476def4be79", + "reference": "1eb028d50c9aff8d1e1720301051c476def4be79", "shasum": "" }, "require": { - "php": "^7.1.3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php72": "~1.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22" }, "conflict": { - "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0", - "symfony/console": "<3.4" + "symfony/console": "<4.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "~3.4|~4.0", - "symfony/process": "~3.4|~4.0", - "twig/twig": "~1.34|~2.4" + "symfony/console": "^4.4|^5.0|^6.0" }, "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + "symfony/console": "For validating YAML files using the lint command" }, "bin": [ - "Resources/bin/var-dump-server" + "Resources/bin/yaml-lint" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.3-dev" - } - }, "autoload": { - "files": [ - "Resources/functions/dump.php" - ], "psr-4": { - "Symfony\\Component\\VarDumper\\": "" + "Symfony\\Component\\Yaml\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -3876,41 +7076,54 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony mechanism for exploring and dumping PHP variables", + "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" + "support": { + "source": "https://github.com/symfony/yaml/tree/5.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } ], - "time": "2019-02-19T21:52:41+00:00" + "time": "2021-07-21T12:43:48+00:00" }, { "name": "theseer/tokenizer", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + "reference": "75a63c33a8577608444246075ea0af0d052e452a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", - "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", + "reference": "75a63c33a8577608444246075ea0af0d052e452a", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.0" + "php": "^7.2 || ^8.0" }, "type": "library", "autoload": { @@ -3930,7 +7143,17 @@ } ], "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "time": "2017-04-07T12:08:54+00:00" + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/master" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2020-07-12T23:59:07+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3938,21 +7161,24 @@ "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757" + "reference": "f4f37098456b0801ee1de84214bbc83078ae3c63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", - "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f4f37098456b0801ee1de84214bbc83078ae3c63", + "reference": "f4f37098456b0801ee1de84214bbc83078ae3c63", "shasum": "" }, "require": { - "php": "^5.5 || ^7.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0" + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { @@ -3977,7 +7203,11 @@ ], "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "time": "2017-11-27T11:13:29+00:00" + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/master" + }, + "time": "2021-05-20T14:26:08+00:00" }, { "name": "vlucas/phpdotenv", @@ -3985,26 +7215,36 @@ "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1ee9369cfbf26cfcf1f2515d98f15fab54e9647a" + "reference": "b83be80cedb862eeb030370cd7939f8333b1c496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1ee9369cfbf26cfcf1f2515d98f15fab54e9647a", - "reference": "1ee9369cfbf26cfcf1f2515d98f15fab54e9647a", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b83be80cedb862eeb030370cd7939f8333b1c496", + "reference": "b83be80cedb862eeb030370cd7939f8333b1c496", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0", - "phpoption/phpoption": "^1.5", - "symfony/polyfill-ctype": "^1.9" + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.1", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.7.4", + "symfony/polyfill-ctype": "^1.17", + "symfony/polyfill-mbstring": "^1.17", + "symfony/polyfill-php80": "^1.17" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.0 || ^6.0" + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.3-dev" + "dev-master": "5.3-dev" } }, "autoload": { @@ -4017,10 +7257,15 @@ "BSD-3-Clause" ], "authors": [ + { + "name": "Graham Campbell", + "email": "graham@alt-three.com", + "homepage": "https://gjcampbell.co.uk/" + }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "http://www.vancelucas.com" + "homepage": "https://vancelucas.com/" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4029,34 +7274,126 @@ "env", "environment" ], - "time": "2019-01-30T10:43:17+00:00" + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/master" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2021-05-23T15:53:44+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "1.5.6", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "80953678b19901e5165c56752d087fc11526017c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", + "reference": "80953678b19901e5165c56752d087fc11526017c", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2020-11-12T00:07:28+00:00" }, { "name": "webmozart/assert", - "version": "1.4.0", + "version": "dev-master", "source": { "type": "git", - "url": "https://github.com/webmozart/assert.git", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + "url": "https://github.com/webmozarts/assert.git", + "reference": "b419d648592b0b8911cbbe10d450fe314f4fd262" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", - "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/b419d648592b0b8911cbbe10d450fe314f4fd262", + "reference": "b419d648592b0b8911cbbe10d450fe314f4fd262", "shasum": "" }, "require": { - "php": "^5.3.3 || ^7.0", + "php": "^7.2 || ^8.0", "symfony/polyfill-ctype": "^1.8" }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, "require-dev": { - "phpunit/phpunit": "^4.6", - "sebastian/version": "^1.0.1" + "phpunit/phpunit": "^8.5.13" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.3-dev" + "dev-master": "1.10-dev" } }, "autoload": { @@ -4080,16 +7417,223 @@ "check", "validate" ], - "time": "2018-12-25T11:19:39+00:00" + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/master" + }, + "time": "2021-06-19T13:45:26+00:00" + }, + { + "name": "zbateson/mail-mime-parser", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/zbateson/mail-mime-parser.git", + "reference": "8eb590750772849189c7fa30ed52bcdcd2c9d1ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/8eb590750772849189c7fa30ed52bcdcd2c9d1ef", + "reference": "8eb590750772849189c7fa30ed52bcdcd2c9d1ef", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7.0|^2.0", + "php": ">=5.4", + "zbateson/mb-wrapper": "^1.0.1", + "zbateson/stream-decorators": "^1.0.6" + }, + "require-dev": { + "mikey179/vfsstream": "^1.6.0", + "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" + }, + "suggest": { + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\MailMimeParser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + }, + { + "name": "Contributors", + "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" + } + ], + "description": "MIME email message parser", + "homepage": "https://mail-mime-parser.org", + "keywords": [ + "MimeMailParser", + "email", + "mail", + "mailparse", + "mime", + "mimeparse", + "parser", + "php-imap" + ], + "support": { + "docs": "https://mail-mime-parser.org/#usage-guide", + "issues": "https://github.com/zbateson/mail-mime-parser/issues", + "source": "https://github.com/zbateson/mail-mime-parser" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2021-07-08T19:06:28+00:00" + }, + { + "name": "zbateson/mb-wrapper", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/zbateson/mb-wrapper.git", + "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", + "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", + "shasum": "" + }, + "require": { + "php": ">=5.4", + "symfony/polyfill-iconv": "^1.9", + "symfony/polyfill-mbstring": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5" + }, + "suggest": { + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\MbWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + } + ], + "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", + "keywords": [ + "charset", + "encoding", + "http", + "iconv", + "mail", + "mb", + "mb_convert_encoding", + "mbstring", + "mime", + "multibyte", + "string" + ], + "support": { + "issues": "https://github.com/zbateson/mb-wrapper/issues", + "source": "https://github.com/zbateson/mb-wrapper/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2020-10-21T22:14:27+00:00" + }, + { + "name": "zbateson/stream-decorators", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/zbateson/stream-decorators.git", + "reference": "3403c4323bd1cd15fe54348b031b26b064c706af" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/3403c4323bd1cd15fe54348b031b26b064c706af", + "reference": "3403c4323bd1cd15fe54348b031b26b064c706af", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7.0|^2.0", + "php": ">=5.4", + "zbateson/mb-wrapper": "^1.0.0" + }, + "require-dev": { + "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\StreamDecorators\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + } + ], + "description": "PHP psr7 stream decorators for mime message part streams", + "keywords": [ + "base64", + "charset", + "decorators", + "mail", + "mime", + "psr7", + "quoted-printable", + "stream", + "uuencode" + ], + "support": { + "issues": "https://github.com/zbateson/stream-decorators/issues", + "source": "https://github.com/zbateson/stream-decorators/tree/1.0.6" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2021-07-08T19:01:59+00:00" } ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "phpunit/phpunit": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": ">=5.4.0" }, - "platform-dev": [] + "platform-dev": [], + "plugin-api-version": "2.0.0" } diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 0000000..bdd211d --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,30 @@ + + + + + src/ + + + + + ./tests + + + + + + + diff --git a/src/Columns.php b/src/Columns.php new file mode 100644 index 0000000..4f5ec03 --- /dev/null +++ b/src/Columns.php @@ -0,0 +1,118 @@ + 'authors.name', + * 'authors.age as author_age', + * ] + * + * @var array + */ + protected array $columns; + + protected array $selects = []; + protected array $keys = []; + protected array $cache; + + public function __construct(array $columns) + { + $this->columns = $columns; + } + + /** + * Return the columns as a valid select array for query builder's select() method. + */ + public function selects(): array + { + if (! empty($this->selects)) return $this->selects; + + foreach ($this->columns as $key => $select) { + if (is_string($key)) { + $select = $select . ' as ' . $key; + } + if (Str::contains($select, ' as ')) { + $select = DB::raw($select); + } + $this->selects[] = $select; + } + + return $this->selects; + } + + /** + * Find the real actual column representing the column in the database table. + * + * @param string $key + * @return mixed + */ + public function find($key) + { + if (array_key_exists($key, $this->columns)) { + return $this->columns[$key]; + } + + if ($this->cache[$key] ?? null) { + return $this->cache[$key]; + } + + foreach ($this->columns as $column) { + if ($column === $key || Str::endsWith($column, ".{$key}")) { + return $this->cache[$key] = $column; + } + + if (Str::endsWith($column, " as {$key}")) { + return $this->cache[$key] = str_replace(" as {$key}", '', $column); + } + } + } + + /** + * Return the valid column keys which can be used as reference name for query sort. + * + * @return array + */ + public function keys(): array + { + if (! empty($this->keys)) return $this->keys; + + foreach ($this->selects() as $select) { + $this->keys[] = static::extractKeyFromSelect($select); + } + + return $this->keys; + } + + public static function extractKeyFromSelect(string $select): string + { + if (Str::contains($select, ' as ')) { + [$rawSelect, $alias] = explode(' as ', $select); + return $alias; + } + + if (Str::contains($select, '.')) { + [$table, $column] = explode('.', $select); + return $column; + } + + return $select; + } + + public function __get($key) + { + return $this->find($key); + } +} + + diff --git a/src/ColumnsParsed.php b/src/ColumnsParsed.php new file mode 100644 index 0000000..0a187bb --- /dev/null +++ b/src/ColumnsParsed.php @@ -0,0 +1,133 @@ + 'authors.name', + * 'authors.age as author_age', + * ] + * + * @var array + */ + protected array $columns; + + protected array $parsed; + + public function __construct(array $columns) + { + $this->columns = $columns; + $this->parsed = static::parse($columns); + } + + public static function parse(array $columns): array + { + $parsed = []; + + foreach ($columns as $key => $select) { + if (is_string($key)) { + $select = "{$select} as {$key}"; + } + if (is_int($key)) { + $key = static::parseKeyFromSelect($select); + } + if (Str::contains($select, ' as ')) { + $select = static::normalizeSelect($select); + } + $parsed[$key] = $select; + } + + return $parsed; + } + + public static function parseKeyFromSelect(string $select): string + { + if (Str::contains($select, ' as ')) { + [$rawSelect, $alias] = explode(' as ', $select); + return $alias; + } + + if (Str::contains($select, '.')) { + [$table, $column] = explode('.', $select); + return $column; + } + + return $select; + } + + public static function normalizeSelect(string $select): string + { + if (Str::contains($select, ' as ')) { + [$rawSelect, $alias] = explode(' as ', $select); + return $rawSelect; + } + + return $select; + } + + public function parsed() + { + return $this->parsed; + } + + public function raw() + { + return $this->columns; + } + + /** + * Return the columns as a valid select array for query builder's select() method. + */ + public function selects(): array + { + $selects = []; + foreach ($this->parsed as $key => $value) { + if (is_string($key)) { + $selects[] = DB::raw("{$value} as {$key}"); + } else { + $selects[] = $value; + } + } + return $selects; + } + + /** + * Find the real actual column representing the column in the database table. + * + * @param string $key + * @return mixed + */ + public function find($key) + { + if (array_key_exists($key, $this->parsed)) { + return $this->parsed[$key]; + } + } + + /** + * Return the valid column keys which can be used as reference name for query sort. + * + * @return array + */ + public function keys(): array + { + return array_keys($this->parsed); + } + + public function __get($key) + { + return $this->find($key); + } +} + + diff --git a/tests/ColumnsTest.php b/tests/ColumnsTest.php new file mode 100644 index 0000000..fa04583 --- /dev/null +++ b/tests/ColumnsTest.php @@ -0,0 +1,69 @@ + 'authors.name', + 'authors.age as author_age', + ]); + + $this->assertEquals('posts.title', $columns->title); + $this->assertEquals('description', $columns->description); + $this->assertEquals('authors.name', $columns->author_name); + $this->assertEquals('authors.age', $columns->author_age); + } + + public function test_selects_can_return_correct_select() + { + $columns = new Columns([ + 'posts.title', + 'description', + 'author_name' => 'authors.name', + 'authors.age as author_age', + ]); + + $asserts = [ + 'posts.title', + 'description', + 'authors.name as author_name', + 'authors.age as author_age', + ]; + + $selects = $columns->selects(); + + foreach ($asserts as $index => $assert) { + $this->assertEquals($assert, $selects[$index]); + } + } + + public function test_keys_should_return_correct_keys() + { + $columns = new Columns([ + 'posts.title', + 'description', + 'author_name' => 'authors.name', + 'authors.age as author_age', + ]); + + $asserts = [ + 'title', + 'description', + 'author_name', + 'author_age', + ]; + + $keys = $columns->keys(); + + foreach ($asserts as $index => $assert) { + $this->assertEquals($assert, $keys[$index]); + } + } +} From 284e15eefd0802a294e0d25476dac600feef0104 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 08:29:16 +0800 Subject: [PATCH 14/39] Save --- .phpunit.result.cache | 2 +- src/Columns.php | 5 +++++ tests/ColumnsTest.php | 6 +++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index dde56bf..e2122ea 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.068,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.012,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.006}} \ No newline at end of file +{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.101,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.016,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.007}} \ No newline at end of file diff --git a/src/Columns.php b/src/Columns.php index 4f5ec03..ef92fcd 100644 --- a/src/Columns.php +++ b/src/Columns.php @@ -31,6 +31,11 @@ public function __construct(array $columns) $this->columns = $columns; } + public static function make(array $columns) + { + return new static($columns); + } + /** * Return the columns as a valid select array for query builder's select() method. */ diff --git a/tests/ColumnsTest.php b/tests/ColumnsTest.php index fa04583..580e1ea 100644 --- a/tests/ColumnsTest.php +++ b/tests/ColumnsTest.php @@ -8,7 +8,7 @@ class ColumnsTest extends \Orchestra\Testbench\TestCase { public function test_find_can_return_the_actual_column() { - $columns = new Columns([ + $columns = Columns::make([ 'posts.title', 'description', 'author_name' => 'authors.name', @@ -23,7 +23,7 @@ public function test_find_can_return_the_actual_column() public function test_selects_can_return_correct_select() { - $columns = new Columns([ + $columns = Columns::make([ 'posts.title', 'description', 'author_name' => 'authors.name', @@ -46,7 +46,7 @@ public function test_selects_can_return_correct_select() public function test_keys_should_return_correct_keys() { - $columns = new Columns([ + $columns = Columns::make([ 'posts.title', 'description', 'author_name' => 'authors.name', From 72b2f8ff5782023722b9c066d35b63a0b2425a2f Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 09:39:57 +0800 Subject: [PATCH 15/39] Save --- .phpunit.result.cache | 2 +- src/BaseGridQuery.php | 199 -------------------------- src/BaseSearch.php | 189 ++++++++++++++++++++++++ src/BaseSearchQuery.php | 133 ----------------- src/Columns.php | 65 ++++++--- src/ColumnsParsed.php | 133 ----------------- src/GridQueryInterface.php | 20 --- src/Search/SublimeSearch.php | 142 ------------------ src/SearchParsers/CustomSearch.php | 18 +++ src/SearchParsers/FuzzySearch.php | 13 ++ src/SearchParsers/ParserInterface.php | 8 ++ tests/BaseSearchTest.php | 60 ++++++++ tests/ColumnsTest.php | 53 ++++--- 13 files changed, 366 insertions(+), 669 deletions(-) delete mode 100644 src/BaseGridQuery.php create mode 100644 src/BaseSearch.php delete mode 100644 src/BaseSearchQuery.php delete mode 100644 src/ColumnsParsed.php delete mode 100644 src/GridQueryInterface.php delete mode 100644 src/Search/SublimeSearch.php create mode 100644 src/SearchParsers/CustomSearch.php create mode 100644 src/SearchParsers/FuzzySearch.php create mode 100644 src/SearchParsers/ParserInterface.php create mode 100644 tests/BaseSearchTest.php diff --git a/.phpunit.result.cache b/.phpunit.result.cache index e2122ea..917f9f1 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.101,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.016,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.007}} \ No newline at end of file +{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.091,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.005,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.006}} \ No newline at end of file diff --git a/src/BaseGridQuery.php b/src/BaseGridQuery.php deleted file mode 100644 index 2a85a7b..0000000 --- a/src/BaseGridQuery.php +++ /dev/null @@ -1,199 +0,0 @@ -query ?? $this->query = $this->initQuery(); - } - - /** - * Return the final query of this gridQuery. - * By default context, we can call selectColumns() to return the query with its selected columns - * to treat them as the final query. - * - * @return \Illuminate\Database\Eloquent\Builder - */ - public function makeQuery() - { - return $this->selectColumns(); - } - - /** - * Return the query from the query() method with its select statement from the columns() method. - * - * @return \Illuminate\Database\Eloquent\Builder - */ - public function selectColumns() - { - return $this->query()->select($this->makeSelect($this->columns())); - } - - /** - * Create an array of select parameters that can be passed in $query->select(). - * String indexed columns will be transformed to have an alias like "column_key as as actual_column". - * - * @param array|null $columns - * @return array - */ - public function makeSelect(array $columns = null) - { - $columns = $columns ?: $this->columns(); - $selects = []; - - foreach ($columns as $key => $select) { - if (is_int($key)) { - $selects[] = $select; - } else { - $selects[] = DB::raw($select.' as '.$key); - } - } - - return $selects; - } - - /** - * Set the query. - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @return $this - */ - public function setQuery($query) - { - $this->query = $query; - - return $this; - } - - /** - * Set the columns of this gridQuery instance of the grid to the given query's select clause. - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @return \Illuminate\Database\Eloquent\Builder - */ - public function setSelectQuery($query) - { - return $query->select($this->makeSelect($this->columns())); - } - - /** - * Get the actual column of the given column key. - * - * @param string $columnKey - * @return string|mixed - */ - public function getColumn($columnKey) - { - return $this->findColumn($this->columns(), $columnKey); - } - - /** - * Find the column from columns. - * - * @param string $columns - * @param string $columnKey - * @return string - */ - public static function findColumn($columns, $columnKey) - { - if (array_key_exists($columnKey, $columns)) { - return $columns[$columnKey]; - } - - foreach ($columns as $column) { - if ($column === $columnKey || ends_with($column, ".{$columnKey}")) { - return $column; - } - } - } - - /** - * Get the actual columns of the given column keys. - * - * @param array $columnKeys - * @return array - */ - public function getColumns(array $columnKeys) - { - $columns = []; - - foreach ($columnKeys as $columnKey) { - $columns[] = $this->getColumn($columnKey); - } - - return $columns; - } - - /** - * Getter for column. - * - * @param string $columnKey - * @return string|mixed - */ - public function __get($columnKey) - { - return $this->getColumn($columnKey); - } - - /** - * Handle dynamic calls on query. - * - * @param string $method - * @param array $parameters - * @return $this - */ - public function __call($method, $parameters) - { - if (!$this->query) { - throw new \Exception("Property \$query is not set. Cannot call method {$method} on object of ".static::class.'.'); - } - - call_user_func_array([$this->query, $method], $parameters); - - return $this; - } - - /** - * Initialize query. - * - * @return \Illuminate\Database\Eloquent\Builder - */ - public function initQuery() - { - throw new \Exception('Please create self initQuery() method on '.get_class($this).'.'); - } - - /** - * Columns declaration of the report grid. - * - * @return array - */ - abstract public function columns(); - - /** - * Return new instance. - * - * @return static - */ - public static function make() - { - return new static; - } -} diff --git a/src/BaseSearch.php b/src/BaseSearch.php new file mode 100644 index 0000000..61e8938 --- /dev/null +++ b/src/BaseSearch.php @@ -0,0 +1,189 @@ +query = $query; + $this->columns = $columns; + $this->sortByRelevance($sortByRelevance); + $this->searchOperator = $searchOperator; + } + + /** + * Apply a search query. + * + * @param string $searchStr + * @return \Illuminate\Database\Eloquent\Builder + */ + public function search($searchStr) + { + $this->searchStr = $searchStr; + $columnsToCompare = $this->columnsToCompare(); + $conditions = []; + $query = $this->query; + + if (count($columnsToCompare) === 0) { + return $query; + } + + $parsedStr = $this->parseSearchStr($searchStr); + + foreach ($columnsToCompare as $column) { + $conditions[] = $column . ' like "' . $parsedStr . '"'; + } + + $method = $this->searchOperator . 'Raw'; + $query->{$method}('(' . join(' OR ', $conditions) . ')'); + + if ($this->shouldSortByRelevance()) { + $this->applySortByRelevance(); + } + + return $query; + } + + /** + * Parse string to search. + * + * @param string|mixed $searchStr + * @return string + */ + protected function parseSearchStr($searchStr) + { + return $this->getDefaultParser()->parse($searchStr); + } + + /** + * Get default search string parser. + * + * @return \AjCastro\Searchable\Search\ParserInterface + */ + public function getDefaultParser(): ParserInterface + { + if (isset($this->defaultParser)) { + return $this->defaultParser; + } + + return new FuzzySearch; + } + + /** + * Set a custom search string parser via callback + * + * @param callable $callback + * @return $this + */ + public function parseUsing(callable $callback) + { + $this->defaultParser = new CustomSearch($callback); + + return $this; + } + + /** + * Set search operator. + * + * @param string $searchOperator + * @return $this + */ + public function setSearchOperator($searchOperator) + { + $this->searchOperator = $searchOperator; + + return $this; + } + + /** + * Set sort by relevance boolean. + * + * @param bool $bool + * @return $this + */ + public function sortByRelevance($sortByRelevance = true) + { + $this->sortByRelevance = $sortByRelevance; + + return $this; + } + + /** + * Whether this search query should sort by relevance with key of `sort_index`. + * + * @return boolean + */ + public function shouldSortByRelevance() + { + return $this->sortByRelevance; + } + + public function applySortByRelevance() + { + SortByRelevance::sort($this->query, $this->sortColumns(), $this->searchStr); + } + + /** + * Return the searchable columns to compare, actual columns for `where` operator and alias column names for `having` operator. + * + * @return array + */ + public function columnsToCompare() + { + return $this->searchOperator === 'having' ? $this->columns->keys() : $this->columns->actual(); + } + + /** + * Return the columns for sorting query. + * + * @return array + */ + protected function sortColumns() + { + return $this->columns->keys(); + } +} diff --git a/src/BaseSearchQuery.php b/src/BaseSearchQuery.php deleted file mode 100644 index e00867a..0000000 --- a/src/BaseSearchQuery.php +++ /dev/null @@ -1,133 +0,0 @@ -searcher()->search($this->searchStr = $searchStr); - } - - /** - * Return a searcher, the search query logic and algorithm. - * - * @return mixed - */ - public function searcher() - { - return new SublimeSearch( - $this->query(), - $this->columns(), - $this->sort, - $this->searchOperator - ); - } - - /** - * Return the columns for sorting query. - * - * @return array - */ - protected function sortColumns() - { - return $this->columns(); - } - - /** - * Set search operator. - * - * @param string $searchOperator - * @return $this - */ - public function setSearchOperator($searchOperator) - { - $this->searchOperator = $searchOperator; - - return $this; - } - - /** - * Alias of sortByRelevance. - * - * @param bool $bool - * @return $this - */ - public function sort($sort = true) - { - return $this->sortByRelevance($sort); - } - - /** - * Set sort boolean. - * - * @param bool $bool - * @return $this - */ - public function sortByRelevance($sort = true) - { - $this->sort = $sort; - - return $this; - } - - /** - * Whether this search query should sort by relevance with key of `sort_index`. - * - * @return boolean - */ - public function shouldSortByRelevance() - { - return $this->sort; - } - - /** - * Apply sorting query by relevance to the search. - * By default using mysql locate function. - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param string $searchStr - * @return \Illuminate\Database\Eloquent\Builder - */ - public function applySortByRelevance() - { - if (!method_exists($this, 'sortColumns')) { - throw new \Exception("Sort by relevance requires sortColumns() method."); - } - - SortByRelevance::sort($this->query, $this->sortColumns(), $this->searchStr); - } -} diff --git a/src/Columns.php b/src/Columns.php index ef92fcd..59d3f5a 100644 --- a/src/Columns.php +++ b/src/Columns.php @@ -23,6 +23,7 @@ class Columns protected array $columns; protected array $selects = []; + protected array $actual = []; protected array $keys = []; protected array $cache; @@ -36,12 +37,39 @@ public static function make(array $columns) return new static($columns); } + /** + * Find the real actual column representing the column in the database table. + * + * @param string $key + * @return mixed + */ + public function find($key) + { + if (array_key_exists($key, $this->columns)) { + return $this->columns[$key]; + } + + if ($this->cache[$key] ?? null) { + return $this->cache[$key]; + } + + foreach ($this->columns as $column) { + if ($column === $key || Str::endsWith($column, ".{$key}")) { + return $this->cache[$key] = $column; + } + + if (Str::endsWith($column, " as {$key}")) { + return $this->cache[$key] = str_replace(" as {$key}", '', $column); + } + } + } + /** * Return the columns as a valid select array for query builder's select() method. */ public function selects(): array { - if (! empty($this->selects)) return $this->selects; + if (!empty($this->selects)) return $this->selects; foreach ($this->columns as $key => $select) { if (is_string($key)) { @@ -57,30 +85,19 @@ public function selects(): array } /** - * Find the real actual column representing the column in the database table. + * Get the actual columns that are in the database table. * - * @param string $key - * @return mixed + * @return array */ - public function find($key) + public function actual(): array { - if (array_key_exists($key, $this->columns)) { - return $this->columns[$key]; - } + if (! empty($this->actual)) return $this->actual; - if ($this->cache[$key] ?? null) { - return $this->cache[$key]; + foreach ($this->selects() as $select) { + $this->actual[] = static::extractActualFromSelect($select); } - foreach ($this->columns as $column) { - if ($column === $key || Str::endsWith($column, ".{$key}")) { - return $this->cache[$key] = $column; - } - - if (Str::endsWith($column, " as {$key}")) { - return $this->cache[$key] = str_replace(" as {$key}", '', $column); - } - } + return $this->actual; } /** @@ -114,6 +131,16 @@ public static function extractKeyFromSelect(string $select): string return $select; } + public static function extractActualFromSelect(string $select): string + { + if (Str::contains($select, ' as ')) { + [$rawSelect, $alias] = explode(' as ', $select); + return $rawSelect; + } + + return $select; + } + public function __get($key) { return $this->find($key); diff --git a/src/ColumnsParsed.php b/src/ColumnsParsed.php deleted file mode 100644 index 0a187bb..0000000 --- a/src/ColumnsParsed.php +++ /dev/null @@ -1,133 +0,0 @@ - 'authors.name', - * 'authors.age as author_age', - * ] - * - * @var array - */ - protected array $columns; - - protected array $parsed; - - public function __construct(array $columns) - { - $this->columns = $columns; - $this->parsed = static::parse($columns); - } - - public static function parse(array $columns): array - { - $parsed = []; - - foreach ($columns as $key => $select) { - if (is_string($key)) { - $select = "{$select} as {$key}"; - } - if (is_int($key)) { - $key = static::parseKeyFromSelect($select); - } - if (Str::contains($select, ' as ')) { - $select = static::normalizeSelect($select); - } - $parsed[$key] = $select; - } - - return $parsed; - } - - public static function parseKeyFromSelect(string $select): string - { - if (Str::contains($select, ' as ')) { - [$rawSelect, $alias] = explode(' as ', $select); - return $alias; - } - - if (Str::contains($select, '.')) { - [$table, $column] = explode('.', $select); - return $column; - } - - return $select; - } - - public static function normalizeSelect(string $select): string - { - if (Str::contains($select, ' as ')) { - [$rawSelect, $alias] = explode(' as ', $select); - return $rawSelect; - } - - return $select; - } - - public function parsed() - { - return $this->parsed; - } - - public function raw() - { - return $this->columns; - } - - /** - * Return the columns as a valid select array for query builder's select() method. - */ - public function selects(): array - { - $selects = []; - foreach ($this->parsed as $key => $value) { - if (is_string($key)) { - $selects[] = DB::raw("{$value} as {$key}"); - } else { - $selects[] = $value; - } - } - return $selects; - } - - /** - * Find the real actual column representing the column in the database table. - * - * @param string $key - * @return mixed - */ - public function find($key) - { - if (array_key_exists($key, $this->parsed)) { - return $this->parsed[$key]; - } - } - - /** - * Return the valid column keys which can be used as reference name for query sort. - * - * @return array - */ - public function keys(): array - { - return array_keys($this->parsed); - } - - public function __get($key) - { - return $this->find($key); - } -} - - diff --git a/src/GridQueryInterface.php b/src/GridQueryInterface.php deleted file mode 100644 index 93d6704..0000000 --- a/src/GridQueryInterface.php +++ /dev/null @@ -1,20 +0,0 @@ -query = $query; - $this->columns = $columns; - $this->sort = $sort; - $this->searchOperator = $searchOperator; - } - - /** - * Get the actual searchable column of the given column key. - * - * @param string $columnKey - * @return string|mixed - */ - public function getColumn($columnKey) - { - return $this->findColumn($this->columnsToCompare(), $columnKey); - } - - /** - * Return the searchable columns to compare, actual columns for `where` operator and alias column names for `having` operator. - * - * @return array - */ - public function columnsToCompare() - { - return $this->searchOperator === 'having' ? $this->columnKeys() : $this->columns(); - } - - /** - * Get the keys of columns to be used in the query result. - * - * @return array - */ - public function columnKeys() - { - $columnKeys = []; - - foreach ($this->columns() as $key => $column) { - if (is_string($key)) { - $columnKeys[] = $key; - } elseif (str_contains($column, '.')) { - list($table, $columnKey) = explode('.', $column); - $columnKeys[] = $columnKey; - } else { - $columnKeys[] = $column; - } - } - - return $columnKeys; - } - - /** - * Apply search query. - * - * @param string|mixed $searchStr - * @return \Illuminate\Database\Eloquent\Builder - */ - public function search($searchStr) - { - $columnsToCompare = $this->columnsToCompare(); - $conditions = []; - $query = $this->query(); - - if (count($columnsToCompare) === 0) { - return $query; - } - - $parsedStr = $this->parseSearchStr($this->searchStr = $searchStr); - - foreach ($columnsToCompare as $column) { - $conditions[] = $column.' like "'.$parsedStr.'"'; - } - - $method = $this->searchOperator.'Raw'; - $query->{$method}('('.join(' OR ', $conditions).')'); - - if ($this->shouldSortByRelevance()) { - $this->applySortByRelevance(); - } - - return $query; - } - - /** - * Parse string to search. - * - * @param string|mixed $searchStr - * @return string - */ - protected function parseSearchStr($searchStr) - { - $searchStr = preg_replace('/[^A-Za-z0-9]/', '', $searchStr); - - return '%'.join('%', str_split($searchStr)).'%'; - } - - /** - * Return the columns for sorting query. - * - * @return array - */ - public function columns() - { - return $this->columns; - } -} diff --git a/src/SearchParsers/CustomSearch.php b/src/SearchParsers/CustomSearch.php new file mode 100644 index 0000000..ba34e07 --- /dev/null +++ b/src/SearchParsers/CustomSearch.php @@ -0,0 +1,18 @@ +callback = $callback; + } + + public function parse($searchStr) + { + return ($this->callback)($searchStr); + } +} diff --git a/src/SearchParsers/FuzzySearch.php b/src/SearchParsers/FuzzySearch.php new file mode 100644 index 0000000..7814ac5 --- /dev/null +++ b/src/SearchParsers/FuzzySearch.php @@ -0,0 +1,13 @@ +search = new BaseSearch( + Post::query(), + Columns::make([ + 'posts.title', + 'description', + 'author_name' => 'authors.name', + 'authors.age as author_age', + ]), + ); + } + + public function test_can_initialize_base_search_and_perform_a_search() + { + $this->assertInstanceOf(BaseSearch::class, $this->search); + $sql = $this->search->search('My Daily Posts')->toSql(); + $this->assertTrue(is_string($sql)); // we just check if it parse successfully + } + + public function test_columns_to_compare_using_where() + { + $this->assertEquals([ + 'posts.title', + 'description', + 'authors.name', + 'authors.age', + ], $this->search->columnsToCompare()); + } + + public function test_columns_to_compare_using_having() + { + $this->search->setSearchOperator('having'); + + $this->assertEquals([ + 'title', + 'description', + 'author_name', + 'author_age', + ], $this->search->columnsToCompare()); + } +} + +class Post extends \Illuminate\Database\Eloquent\Model +{ +} diff --git a/tests/ColumnsTest.php b/tests/ColumnsTest.php index 580e1ea..b5c313e 100644 --- a/tests/ColumnsTest.php +++ b/tests/ColumnsTest.php @@ -6,30 +6,30 @@ class ColumnsTest extends \Orchestra\Testbench\TestCase { - public function test_find_can_return_the_actual_column() + protected Columns $columns; + + public function setUp(): void { - $columns = Columns::make([ + parent::setUp(); + + $this->columns = Columns::make([ 'posts.title', 'description', 'author_name' => 'authors.name', 'authors.age as author_age', ]); + } - $this->assertEquals('posts.title', $columns->title); - $this->assertEquals('description', $columns->description); - $this->assertEquals('authors.name', $columns->author_name); - $this->assertEquals('authors.age', $columns->author_age); + public function test_find_can_return_the_actual_column() + { + $this->assertEquals('posts.title', $this->columns->title); + $this->assertEquals('description', $this->columns->description); + $this->assertEquals('authors.name', $this->columns->author_name); + $this->assertEquals('authors.age', $this->columns->author_age); } public function test_selects_can_return_correct_select() { - $columns = Columns::make([ - 'posts.title', - 'description', - 'author_name' => 'authors.name', - 'authors.age as author_age', - ]); - $asserts = [ 'posts.title', 'description', @@ -37,7 +37,7 @@ public function test_selects_can_return_correct_select() 'authors.age as author_age', ]; - $selects = $columns->selects(); + $selects = $this->columns->selects(); foreach ($asserts as $index => $assert) { $this->assertEquals($assert, $selects[$index]); @@ -46,13 +46,6 @@ public function test_selects_can_return_correct_select() public function test_keys_should_return_correct_keys() { - $columns = Columns::make([ - 'posts.title', - 'description', - 'author_name' => 'authors.name', - 'authors.age as author_age', - ]); - $asserts = [ 'title', 'description', @@ -60,7 +53,23 @@ public function test_keys_should_return_correct_keys() 'author_age', ]; - $keys = $columns->keys(); + $keys = $this->columns->keys(); + + foreach ($asserts as $index => $assert) { + $this->assertEquals($assert, $keys[$index]); + } + } + + public function test_actual_should_return_correct_actual_columns() + { + $asserts = [ + 'posts.title', + 'description', + 'authors.name', + 'authors.age', + ]; + + $keys = $this->columns->actual(); foreach ($asserts as $index => $assert) { $this->assertEquals($assert, $keys[$index]); From 38292b811dd0f320e93f8b7e950dee5aac30ca52 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 10:50:40 +0800 Subject: [PATCH 16/39] Save --- .phpunit.result.cache | 2 +- src/BaseSearch.php | 21 +++++- src/Searchable.php | 142 +++++++++++++++++---------------------- src/TableColumns.php | 26 +++++++ tests/BaseSearchTest.php | 11 ++- tests/SearchableTest.php | 78 +++++++++++++++++++++ tests/Stubs/Post.php | 12 ++++ 7 files changed, 203 insertions(+), 89 deletions(-) create mode 100644 src/TableColumns.php create mode 100644 tests/SearchableTest.php create mode 100644 tests/Stubs/Post.php diff --git a/.phpunit.result.cache b/.phpunit.result.cache index 917f9f1..23dc984 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.091,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.005,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.006}} \ No newline at end of file +{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3,"Tests\\SearchableTest::test_Searchable_getColumn":3,"Tests\\SearchableTest::test_Searchable_isColumnValid":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.09,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.005,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.005,"Tests\\SearchableTest::test_Searchable_getColumn":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_sortable_columns":0.005}} \ No newline at end of file diff --git a/src/BaseSearch.php b/src/BaseSearch.php index 61e8938..19497f1 100644 --- a/src/BaseSearch.php +++ b/src/BaseSearch.php @@ -47,14 +47,18 @@ class BaseSearch */ protected bool $sortByRelevance = true; - public function __construct(Builder $query, Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') + public function __construct(Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') { - $this->query = $query; $this->columns = $columns; $this->sortByRelevance($sortByRelevance); $this->searchOperator = $searchOperator; } + public static function make(Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') + { + return new static($columns, $sortByRelevance, $searchOperator); + } + /** * Apply a search query. * @@ -126,6 +130,19 @@ public function parseUsing(callable $callback) return $this; } + /** + * Set query. + * + * @param Builder $query + * @return $this + */ + public function setQuery(Builder $query) + { + $this->query = $query; + + return $this; + } + /** * Set search operator. * diff --git a/src/Searchable.php b/src/Searchable.php index 4dd2b96..5f13cbf 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -8,12 +8,8 @@ trait Searchable { - protected static $allSearchableColumns = []; - protected $searchableEnabled = true; - protected $sortByRelevance = true; - protected $searchQuery; /** @@ -31,7 +27,7 @@ public function searchableColumns() return $this->searchable['columns']; } - return static::getTableColumns($this->getTable()); + return TableColumns::get($this->getTable()); } /** @@ -49,50 +45,55 @@ public function sortableColumns() return $this->searchable['sortable_columns']; } - return static::getTableColumns($this->getTable()); + return TableColumns::get($this->getTable()); } /** - * Get table columns. + * Identifies if the column is a valid column, either a regular table column or derived column. + * Useful for checking valid columns to avoid sql injection especially in orderBy query. * - * @param string $table - * @return array + * @param string $column + * @return boolean */ - public static function getTableColumns($table = null) + public function isColumnValid($column) { - $table = $table ?? (new static)->getTable(); + return (bool) $this->buildAllColumns()->find($column); + } - if (!Arr::has(static::$allSearchableColumns, $table)) { - static::$allSearchableColumns[$table] = Schema::getColumnListing($table); - } - return static::$allSearchableColumns[$table]; + /** + * Build columns from both searchable and sortable columns + */ + public function buildAllColumns(): Columns + { + return Columns::make(array_merge($this->searchableColumns(), $this->sortableColumns())); } /** - * Identifies if the column is a valid column, either a regular table column or derived column. - * Useful for checking valid columns to avoid sql injection especially in orderBy query. - * - * @param string $column - * @return boolean + * Build columns from searchable */ - public static function isColumnValid($column) + public function buildSearchableColumns(): Columns { - $model = new static; - $allColumns = array_merge($model->searchableColumns(), $model->sortableColumns()); - - // Derived columns are a key in allColumns. - if (array_key_exists($column, $allColumns)) { - return true; - } + return Columns::make($this->searchableColumns()); + } - // Regular table column can be included in the allColumns. - if (in_array($column, $allColumns)) { - return true; - } + /** + * Build columns from sortable + */ + public function buildSortableColumns(): Columns + { + return Columns::make($this->sortableColumns()); + } - // Regular table column from the table - return in_array($column, static::getTableColumns($model->getTable())); + /** + * Get the actual column from both searchable and sortable columns + * + * @param string $column + * @return void + */ + public function getColumn($column) + { + return $this->buildAllColumns()->find($column); } /** @@ -101,12 +102,20 @@ public static function isColumnValid($column) * @param string $column * @return string|mixed */ - public static function getSortableColumn($column) + public function getSearchableColumn($column) { - $model = new static; - $allColumns = array_merge($model->searchableColumns(), $model->sortableColumns()); + return $this->buildSearchableColumns()->find($column); + } - return BaseGridQuery::findColumn($allColumns, $column); + /** + * Get the actual sortable column. + * + * @param string $column + * @return string|mixed + */ + public function getSortableColumn($column) + { + return $this->buildSortableColumns()->find($column); } /** @@ -144,9 +153,9 @@ protected function applySearchableJoins($query) /** * Return the search query. * - * @return mixed|\AjCastro\Searchable\Search\SublimeSearch + * @return \AjCastro\Searchable\BaseSearch */ - public function searchQuery() + public function searchQuery(): BaseSearch { if ($this->searchQuery) { return $this->searchQuery; @@ -156,15 +165,15 @@ public function searchQuery() return $this->searchQuery = $this->defaultSearchQuery(); } - return $this->searchQuery = new SublimeSearch($this, $this->searchableColumns(), $this->sortByRelevance, 'where'); + return $this->searchQuery = new BaseSearch($this->buildSearchableColumns()); } /** * Set the model's search query. * - * @param \AjCastro\Searchable\BaseSearchQuery $searchQuery + * @param \AjCastro\Searchable\BaseSearch $searchQuery */ - public function setSearchQuery($searchQuery) + public function setSearchQuery(BaseSearch $searchQuery) { $this->searchQuery = $searchQuery; @@ -196,7 +205,7 @@ public function enableSearchable() /** * Apply search in the query. * - * @param query $query + * @param \Illuminate\Database\Eloquent\Builder $query * @param string $search * * @return void @@ -213,7 +222,7 @@ public function scopeSearch($query, $search) $query->select([$query->getQuery()->from.'.*']); } - $this->searchQuery()->setQuery($query)->search($search); + $query->getModel()->searchQuery()->setQuery($query)->search($search); } /** @@ -224,32 +233,7 @@ public function scopeSearch($query, $search) */ public function scopeSortByRelevance($query, $sortByRelevance = true) { - $query->getModel()->searchableSortByRelevance($sortByRelevance); - } - - /** - * Set model's $sortByRelevance for searchable query. - * - * @param boolean $sortByRelevance - * @return $this - */ - public function searchableSortByRelevance($sortByRelevance = true) - { - $this->sortByRelevance = $sortByRelevance; - - $this->searchQuery()->sortByRelevance($sortByRelevance); - - return $this; - } - - /** - * If model should sort by relevance. - * - * @return bool - */ - public function shouldSortByRelevance() - { - return $this->sortByRelevance; + $query->getModel()->searchQuery()->sortByRelevance($sortByRelevance); } /** @@ -260,9 +244,9 @@ public function shouldSortByRelevance() */ public function setSearchable($config) { - $this->setSearchableColumns(array_get($config, 'columns')); - $this->setSearchableJoins(array_get($config, 'joins')); - $this->setSortableColumns(array_get($config, 'sortable_columns')); + $this->setSearchableColumns(Arr::get($config, 'columns')); + $this->setSearchableJoins(Arr::get($config, 'joins')); + $this->setSortableColumns(Arr::get($config, 'sortable_columns')); return $this; } @@ -332,16 +316,16 @@ public function setSortableColumns($columns) */ public function addSearchable($config) { - if ($columns = array_get($config, 'columns')) { + if ($columns = Arr::get($config, 'columns')) { $this->addSearchableColumns($columns); } - if ($joins = array_get($config, 'joins')) { - $this->addSearchableJoins($joins); + if ($columns = Arr::get($config, 'sortable_columns')) { + $this->addSortableColumns($columns); } - if ($columns = array_get($config, 'sortable_columns')) { - $this->addSortableColumns($columns); + if ($joins = Arr::get($config, 'joins')) { + $this->addSearchableJoins($joins); } return $this; diff --git a/src/TableColumns.php b/src/TableColumns.php new file mode 100644 index 0000000..9ded4fd --- /dev/null +++ b/src/TableColumns.php @@ -0,0 +1,26 @@ +search = new BaseSearch( - Post::query(), + $this->search = BaseSearch::make( Columns::make([ 'posts.title', 'description', 'author_name' => 'authors.name', 'authors.age as author_age', ]), - ); + ) + ->setQuery(Post::query()); } public function test_can_initialize_base_search_and_perform_a_search() @@ -54,7 +55,3 @@ public function test_columns_to_compare_using_having() ], $this->search->columnsToCompare()); } } - -class Post extends \Illuminate\Database\Eloquent\Model -{ -} diff --git a/tests/SearchableTest.php b/tests/SearchableTest.php new file mode 100644 index 0000000..0cef519 --- /dev/null +++ b/tests/SearchableTest.php @@ -0,0 +1,78 @@ +setSearchable([ + 'columns' => [ + 'posts.title', + 'description', + 'author_name' => 'authors.name', + 'authors.age as author_age', + ], + ]); + } + + private function postWithSortableColumns() + { + return Post::make()->setSearchable([ + 'sortable_columns' => [ + 'posts.title', + 'description', + 'author_name' => 'authors.name', + 'authors.age as author_age', + ], + ]); + } + + private function assertGetColumn(Post $post) + { + $this->assertEquals('posts.title', $post->getColumn('title')); + $this->assertEquals('description', $post->getColumn('description')); + $this->assertEquals('authors.name', $post->getColumn('author_name')); + $this->assertEquals('authors.age', $post->getColumn('author_age')); + } + + private function assertIsColumnValid(Post $post) + { + $this->assertTrue($post->isColumnValid('title')); + $this->assertTrue($post->isColumnValid('description')); + $this->assertTrue($post->isColumnValid('author_name')); + $this->assertTrue($post->isColumnValid('author_age')); + + $this->assertFalse($post->isColumnValid('title_x')); + $this->assertFalse($post->isColumnValid('description_x')); + $this->assertFalse($post->isColumnValid('author_name_x')); + $this->assertFalse($post->isColumnValid('author_age_x')); + } + + public function test_Searchable_getColumn_from_searchable_columns() + { + $post = $this->postWithSearchableColumns(); + $this->assertGetColumn($post); + } + + public function test_Searchable_isColumnValid_from_searchable_columns() + { + $post = $this->postWithSearchableColumns(); + $this->assertIsColumnValid($post); + } + public function test_Searchable_getColumn_from_sortable_columns() + { + $post = $this->postWithSortableColumns(); + $this->assertGetColumn($post); + } + + public function test_Searchable_isColumnValid_from_sortable_columns() + { + $post = $this->postWithSortableColumns(); + $this->assertIsColumnValid($post); + } +} diff --git a/tests/Stubs/Post.php b/tests/Stubs/Post.php new file mode 100644 index 0000000..d7a8acf --- /dev/null +++ b/tests/Stubs/Post.php @@ -0,0 +1,12 @@ + Date: Sun, 25 Jul 2021 11:03:21 +0800 Subject: [PATCH 17/39] Refactor --- .phpunit.result.cache | 2 +- src/Searchable.php | 284 +---------------- src/WithSearchableColumns.php | 286 ++++++++++++++++++ ...Test.php => WithSearchableColumnsTest.php} | 2 +- 4 files changed, 292 insertions(+), 282 deletions(-) create mode 100644 src/WithSearchableColumns.php rename tests/{SearchableTest.php => WithSearchableColumnsTest.php} (97%) diff --git a/.phpunit.result.cache b/.phpunit.result.cache index 23dc984..f0074ff 100644 --- a/.phpunit.result.cache +++ b/.phpunit.result.cache @@ -1 +1 @@ -{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3,"Tests\\SearchableTest::test_Searchable_getColumn":3,"Tests\\SearchableTest::test_Searchable_isColumnValid":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.09,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.005,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.005,"Tests\\SearchableTest::test_Searchable_getColumn":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_sortable_columns":0.005}} \ No newline at end of file +{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3,"Tests\\SearchableTest::test_Searchable_getColumn":3,"Tests\\SearchableTest::test_Searchable_isColumnValid":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.085,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.005,"Tests\\SearchableTest::test_Searchable_getColumn":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_sortable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_isColumnValid_from_sortable_columns":0.005}} \ No newline at end of file diff --git a/src/Searchable.php b/src/Searchable.php index 5f13cbf..aa0db4f 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -2,140 +2,14 @@ namespace AjCastro\Searchable; -use Illuminate\Support\Arr; -use Illuminate\Support\Facades\Schema; -use AjCastro\Searchable\Search\SublimeSearch; - trait Searchable { + use WithSearchableColumns; + protected $searchableEnabled = true; protected $searchQuery; - /** - * Return the searchable columns for this model's table. - * - * @return array - */ - public function searchableColumns() - { - if (property_exists($this, 'searchableColumns')) { - return $this->searchableColumns; - } - - if (property_exists($this, 'searchable') && array_key_exists('columns', $this->searchable)) { - return $this->searchable['columns']; - } - - return TableColumns::get($this->getTable()); - } - - /** - * Return the sortable columns for this model's table. - * - * @return array - */ - public function sortableColumns() - { - if (property_exists($this, 'sortableColumns')) { - return $this->sortableColumns; - } - - if (property_exists($this, 'searchable') && array_key_exists('sortable_columns', $this->searchable)) { - return $this->searchable['sortable_columns']; - } - - return TableColumns::get($this->getTable()); - } - - /** - * Identifies if the column is a valid column, either a regular table column or derived column. - * Useful for checking valid columns to avoid sql injection especially in orderBy query. - * - * @param string $column - * @return boolean - */ - public function isColumnValid($column) - { - return (bool) $this->buildAllColumns()->find($column); - } - - - /** - * Build columns from both searchable and sortable columns - */ - public function buildAllColumns(): Columns - { - return Columns::make(array_merge($this->searchableColumns(), $this->sortableColumns())); - } - - /** - * Build columns from searchable - */ - public function buildSearchableColumns(): Columns - { - return Columns::make($this->searchableColumns()); - } - - /** - * Build columns from sortable - */ - public function buildSortableColumns(): Columns - { - return Columns::make($this->sortableColumns()); - } - - /** - * Get the actual column from both searchable and sortable columns - * - * @param string $column - * @return void - */ - public function getColumn($column) - { - return $this->buildAllColumns()->find($column); - } - - /** - * Get the actual sortable column. - * - * @param string $column - * @return string|mixed - */ - public function getSearchableColumn($column) - { - return $this->buildSearchableColumns()->find($column); - } - - /** - * Get the actual sortable column. - * - * @param string $column - * @return string|mixed - */ - public function getSortableColumn($column) - { - return $this->buildSortableColumns()->find($column); - } - - /** - * Return the searchable joins for the search query. - * - * @return array - */ - public function searchableJoins() - { - if (property_exists($this, 'searchableJoins')) { - return $this->searchableJoins; - } - - if (property_exists($this, 'searchable') && array_key_exists('joins', $this->searchable)) { - return $this->searchable['joins']; - } - - return []; - } - /** * Apply searchable joins for the search query. * @@ -188,6 +62,7 @@ public function setSearchQuery(BaseSearch $searchQuery) public function disableSearchable() { $this->searchableEnabled = false; + return $this; } @@ -199,6 +74,7 @@ public function disableSearchable() public function enableSearchable() { $this->searchableEnabled = true; + return $this; } @@ -235,156 +111,4 @@ public function scopeSortByRelevance($query, $sortByRelevance = true) { $query->getModel()->searchQuery()->sortByRelevance($sortByRelevance); } - - /** - * Set $searchable. - * - * @param array $config - * @return $this - */ - public function setSearchable($config) - { - $this->setSearchableColumns(Arr::get($config, 'columns')); - $this->setSearchableJoins(Arr::get($config, 'joins')); - $this->setSortableColumns(Arr::get($config, 'sortable_columns')); - - return $this; - } - - /** - * Set searchable columns. - * - * @param array $columns - * @return $this - */ - public function setSearchableColumns($columns) - { - if (property_exists($this, 'searchableColumns')) { - $this->searchableColumns = $columns ?? []; - } - - if (property_exists($this, 'searchable')) { - $this->searchable['columns'] = $columns ?? []; - } - - return $this; - } - - /** - * Set searchable joins. - * - * @param array $joins - * @return $this - */ - public function setSearchableJoins($joins) - { - if (property_exists($this, 'searchableJoins')) { - $this->searchableJoins = $joins ?? []; - } - - if (property_exists($this, 'searchable')) { - $this->searchable['joins'] = $joins ?? []; - } - - return $this; - } - - /** - * Set sortable columns. - * - * @param array $columns - * @return $this - */ - public function setSortableColumns($columns) - { - if (property_exists($this, 'sortableColumns')) { - $this->sortableColumns = $columns ?? []; - } - - if (property_exists($this, 'searchable')) { - $this->searchable['sortable_columns'] = $columns ?? []; - } - - return $this; - } - - /** - * Add searchable. - * - * @param array $config - * @return $this - */ - public function addSearchable($config) - { - if ($columns = Arr::get($config, 'columns')) { - $this->addSearchableColumns($columns); - } - - if ($columns = Arr::get($config, 'sortable_columns')) { - $this->addSortableColumns($columns); - } - - if ($joins = Arr::get($config, 'joins')) { - $this->addSearchableJoins($joins); - } - - return $this; - } - - /** - * Add searchable columns. - * - * @param array $columns - * @return $this - */ - public function addSearchableColumns($columns) - { - if (property_exists($this, 'searchableColumns')) { - $this->searchableColumns = array_merge($this->searchableColumns, $columns); - } - - if (property_exists($this, 'searchable')) { - $this->searchable['columns'] = array_merge($this->searchable['columns'], $columns); - } - - return $this; - } - - /** - * Add searchable joins. - * - * @param array $joins - * @return $this - */ - public function addSearchableJoins($joins) - { - if (property_exists($this, 'searchableJoins')) { - $this->searchableJoins = array_merge($this->searchableJoins, $joins); - } - - if (property_exists($this, 'searchable')) { - $this->searchable['joins'] = array_merge($this->searchable['joins'], $joins); - } - - return $this; - } - - /** - * Add sortable columns. - * - * @param array $columns - * @return $this - */ - public function addSortableColumns($columns) - { - if (property_exists($this, 'sortableColumns')) { - $this->sortableColumns = array_merge($this->sortableColumns, $columns); - } - - if (property_exists($this, 'searchable')) { - $this->searchable['sortable_columns'] = array_merge($this->searchable['sortable_columns'], $columns); - } - - return $this; - } } diff --git a/src/WithSearchableColumns.php b/src/WithSearchableColumns.php new file mode 100644 index 0000000..35ecea3 --- /dev/null +++ b/src/WithSearchableColumns.php @@ -0,0 +1,286 @@ +searchableColumns; + } + + if (property_exists($this, 'searchable') && array_key_exists('columns', $this->searchable)) { + return $this->searchable['columns']; + } + + return TableColumns::get($this->getTable()); + } + + /** + * Return the sortable columns for this model's table. + * + * @return array + */ + public function sortableColumns() + { + if (property_exists($this, 'sortableColumns')) { + return $this->sortableColumns; + } + + if (property_exists($this, 'searchable') && array_key_exists('sortable_columns', $this->searchable)) { + return $this->searchable['sortable_columns']; + } + + return TableColumns::get($this->getTable()); + } + + /** + * Identifies if the column is a valid column, either a regular table column or derived column. + * Useful for checking valid columns to avoid sql injection especially in orderBy query. + * + * @param string $column + * @return boolean + */ + public function isColumnValid($column) + { + return (bool) $this->buildAllColumns()->find($column); + } + + + /** + * Build columns from both searchable and sortable columns + */ + public function buildAllColumns(): Columns + { + return Columns::make(array_merge($this->searchableColumns(), $this->sortableColumns())); + } + + /** + * Build columns from searchable + */ + public function buildSearchableColumns(): Columns + { + return Columns::make($this->searchableColumns()); + } + + /** + * Build columns from sortable + */ + public function buildSortableColumns(): Columns + { + return Columns::make($this->sortableColumns()); + } + + /** + * Get the actual column from both searchable and sortable columns + * + * @param string $column + * @return void + */ + public function getColumn($column) + { + return $this->buildAllColumns()->find($column); + } + + /** + * Get the actual sortable column. + * + * @param string $column + * @return string|mixed + */ + public function getSearchableColumn($column) + { + return $this->buildSearchableColumns()->find($column); + } + + /** + * Get the actual sortable column. + * + * @param string $column + * @return string|mixed + */ + public function getSortableColumn($column) + { + return $this->buildSortableColumns()->find($column); + } + + /** + * Return the searchable joins for the search query. + * + * @return array + */ + public function searchableJoins() + { + if (property_exists($this, 'searchableJoins')) { + return $this->searchableJoins; + } + + if (property_exists($this, 'searchable') && array_key_exists('joins', $this->searchable)) { + return $this->searchable['joins']; + } + + return []; + } + + /** + * Set $searchable. + * + * @param array $config + * @return $this + */ + public function setSearchable($config) + { + $this->setSearchableColumns(Arr::get($config, 'columns')); + $this->setSearchableJoins(Arr::get($config, 'joins')); + $this->setSortableColumns(Arr::get($config, 'sortable_columns')); + + return $this; + } + + /** + * Set searchable columns. + * + * @param array $columns + * @return $this + */ + public function setSearchableColumns($columns) + { + if (property_exists($this, 'searchableColumns')) { + $this->searchableColumns = $columns ?? []; + } + + if (property_exists($this, 'searchable')) { + $this->searchable['columns'] = $columns ?? []; + } + + return $this; + } + + /** + * Set searchable joins. + * + * @param array $joins + * @return $this + */ + public function setSearchableJoins($joins) + { + if (property_exists($this, 'searchableJoins')) { + $this->searchableJoins = $joins ?? []; + } + + if (property_exists($this, 'searchable')) { + $this->searchable['joins'] = $joins ?? []; + } + + return $this; + } + + /** + * Set sortable columns. + * + * @param array $columns + * @return $this + */ + public function setSortableColumns($columns) + { + if (property_exists($this, 'sortableColumns')) { + $this->sortableColumns = $columns ?? []; + } + + if (property_exists($this, 'searchable')) { + $this->searchable['sortable_columns'] = $columns ?? []; + } + + return $this; + } + + /** + * Add searchable. + * + * @param array $config + * @return $this + */ + public function addSearchable($config) + { + if ($columns = Arr::get($config, 'columns')) { + $this->addSearchableColumns($columns); + } + + if ($columns = Arr::get($config, 'sortable_columns')) { + $this->addSortableColumns($columns); + } + + if ($joins = Arr::get($config, 'joins')) { + $this->addSearchableJoins($joins); + } + + return $this; + } + + /** + * Add searchable columns. + * + * @param array $columns + * @return $this + */ + public function addSearchableColumns($columns) + { + if (property_exists($this, 'searchableColumns')) { + $this->searchableColumns = array_merge($this->searchableColumns, $columns); + } + + if (property_exists($this, 'searchable')) { + $this->searchable['columns'] = array_merge($this->searchable['columns'], $columns); + } + + return $this; + } + + /** + * Add searchable joins. + * + * @param array $joins + * @return $this + */ + public function addSearchableJoins($joins) + { + if (property_exists($this, 'searchableJoins')) { + $this->searchableJoins = array_merge($this->searchableJoins, $joins); + } + + if (property_exists($this, 'searchable')) { + $this->searchable['joins'] = array_merge($this->searchable['joins'], $joins); + } + + return $this; + } + + /** + * Add sortable columns. + * + * @param array $columns + * @return $this + */ + public function addSortableColumns($columns) + { + if (property_exists($this, 'sortableColumns')) { + $this->sortableColumns = array_merge($this->sortableColumns, $columns); + } + + if (property_exists($this, 'searchable')) { + $this->searchable['sortable_columns'] = array_merge($this->searchable['sortable_columns'], $columns); + } + + return $this; + } +} diff --git a/tests/SearchableTest.php b/tests/WithSearchableColumnsTest.php similarity index 97% rename from tests/SearchableTest.php rename to tests/WithSearchableColumnsTest.php index 0cef519..df6e2ef 100644 --- a/tests/SearchableTest.php +++ b/tests/WithSearchableColumnsTest.php @@ -6,7 +6,7 @@ use AjCastro\Searchable\Searchable; use Tests\Stubs\Post; -class SearchableTest extends \Orchestra\Testbench\TestCase +class WithSearchableColumnsTest extends \Orchestra\Testbench\TestCase { private function postWithSearchableColumns() { From cfb6de79955dfd2721c9e8c97c29b3630f610259 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 11:10:08 +0800 Subject: [PATCH 18/39] Update git attributes and git ignore. --- .gitattributes | 6 + .gitignore | 4 +- composer.lock | 7639 ------------------------------------------------ 3 files changed, 9 insertions(+), 7640 deletions(-) create mode 100644 .gitattributes delete mode 100644 composer.lock diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..bf0c3fa --- /dev/null +++ b/.gitattributes @@ -0,0 +1,6 @@ +/.gitattributes export-ignore +/.gitignore export-ignore +/.travis.yml export-ignore +/phpunit.xml export-ignore +/tests export-ignore +/.editorconfig export-ignore diff --git a/.gitignore b/.gitignore index 49ce3c1..a7dfead 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ -/vendor \ No newline at end of file +composer.lock +.phpunit.result.cache +vendor diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 630013f..0000000 --- a/composer.lock +++ /dev/null @@ -1,7639 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "b462d7b20b885a7b7dbf2daeff60c7e1", - "packages": [], - "packages-dev": [ - { - "name": "brick/math", - "version": "0.9.2", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" - } - ], - "time": "2021-01-20T22:51:39+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/e04ff030d24a33edc2421bef305e32919dd78fc3", - "reference": "e04ff030d24a33edc2421bef305e32919dd78fc3", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.14" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.0" - }, - "time": "2021-01-01T22:08:42+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7", - "reference": "c6a0da4f0e06aa5cd83a2c1a4e449fae98c8bad7", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.1.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2020-10-28T16:09:51+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "6410c4b8352cb64218641457cef64997e6b784fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/6410c4b8352cb64218641457cef64997e6b784fb", - "reference": "6410c4b8352cb64218641457cef64997e6b784fb", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2020-11-10T19:05:51+00:00" - }, - { - "name": "doctrine/lexer", - "version": "1.3.x-dev", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "59bfb3b9be04237be4cd1afea9bbb58794c25ce8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/59bfb3b9be04237be4cd1afea9bbb58794c25ce8", - "reference": "59bfb3b9be04237be4cd1afea9bbb58794c25ce8", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^8.0", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^8.2 || ^9.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.3.x" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2021-01-20T07:15:06+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v3.1.0", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.7.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-webmozart-assert": "^0.12.7", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2020-11-24T19:55:57+00:00" - }, - { - "name": "egulias/email-validator", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" - }, - "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2020-12-29T14:50:06+00:00" - }, - { - "name": "fakerphp/faker", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834", - "reference": "f3cab70182d2e2d3e740dddd9ce6c0ccdbdf4834", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "psr/container": "^1.0", - "symfony/deprecation-contracts": "^2.2" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-intl": "*", - "symfony/phpunit-bridge": "^4.4 || ^5.2" - }, - "suggest": { - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.15-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/main" - }, - "time": "2021-07-22T11:49:59+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "1.0.x-dev", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6", - "reference": "cce288e91826d6d33d76b57f1ad4bdc3f3a8c1d6", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.7.3" - }, - "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.7" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/1.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2021-01-25T20:12:13+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", - "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Schultze", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.0.0" - }, - "time": "2021-06-30T20:03:07+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "laravel/framework", - "version": "8.x-dev", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "6e9baa07af67f2ae44127ef7e93762f3fd42868f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/6e9baa07af67f2ae44127ef7e93762f3fd42868f", - "reference": "6e9baa07af67f2ae44127ef7e93762f3fd42868f", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", - "ext-mbstring": "*", - "ext-openssl": "*", - "league/commonmark": "^1.3|^2.0", - "league/flysystem": "^1.1", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.31", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.0", - "swiftmailer/swiftmailer": "^6.0", - "symfony/console": "^5.1.4", - "symfony/error-handler": "^5.1.4", - "symfony/finder": "^5.1.4", - "symfony/http-foundation": "^5.1.4", - "symfony/http-kernel": "^5.1.4", - "symfony/mime": "^5.1.4", - "symfony/process": "^5.1.4", - "symfony/routing": "^5.1.4", - "symfony/var-dumper": "^5.1.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^5.2", - "voku/portable-ascii": "^1.4.8" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.155", - "doctrine/dbal": "^2.6|^3.0", - "filp/whoops": "^2.8", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.2", - "orchestra/testbench-core": "^6.23", - "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "predis/predis": "^1.1.2", - "symfony/cache": "^5.1.4" - }, - "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.8).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.2).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^8.5.8|^9.3.3).", - "predis/predis": "Required to use the predis connector (^1.1.2).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.1.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.1.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "8.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2021-07-23T13:09:12+00:00" - }, - { - "name": "league/commonmark", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "61f4efe57db6b8c02a1470dd0894fbacf23ef19b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/61f4efe57db6b8c02a1470dd0894fbacf23ef19b", - "reference": "61f4efe57db6b8c02a1470dd0894fbacf23ef19b", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/polyfill-php80": "^1.15" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", - "composer/package-versions-deprecated": "^1.8", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4", - "phpstan/phpstan": "^0.12.88", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://enjoy.gitstore.app/repositories/thephpleague/commonmark", - "type": "custom" - }, - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://www.patreon.com/colinodell", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2021-07-17T17:20:25+00:00" - }, - { - "name": "league/config", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/20d42d88f12a76ff862e17af4f14a5a4bbfd0925", - "reference": "20d42d88f12a76ff862e17af4f14a5a4bbfd0925", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.90", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2021-06-19T15:52:37+00:00" - }, - { - "name": "league/flysystem", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "reference": "f3ad69181b8afed2c9edf7be5a2918144ff4ea32", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" - }, - "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frenky.net" - } - ], - "description": "Filesystem abstraction: Many filesystems, one API.", - "keywords": [ - "Cloud Files", - "WebDAV", - "abstraction", - "aws", - "cloud", - "copy.com", - "dropbox", - "file systems", - "files", - "filesystem", - "filesystems", - "ftp", - "rackspace", - "remote", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.x" - }, - "funding": [ - { - "url": "https://offset.earth/frankdejonge", - "type": "other" - } - ], - "time": "2021-06-23T21:56:05+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.7.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2021-01-18T20:58:21+00:00" - }, - { - "name": "mockery/mockery", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3", - "reference": "ef4ba5b7cd76d582ef82bdecb0be5429f943dbc3", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/master" - }, - "time": "2021-07-19T08:40:21+00:00" - }, - { - "name": "monolog/monolog", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "71312564759a7db5b789296369c1a264efc43aad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/71312564759a7db5b789296369c1a264efc43aad", - "reference": "71312564759a7db5b789296369c1a264efc43aad", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1" - }, - "provide": { - "psr/log-implementation": "1.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", - "graylog2/gelf-php": "^1.4.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90 <7.0.1", - "swiftmailer/swiftmailer": "^5.3|^6.0" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "php-console/php-console": "Allow sending log messages to Google Chrome", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.2" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2021-07-23T07:42:52+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "replace": { - "myclabs/deep-copy": "self.version" - }, - "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2020-11-13T09:40:50+00:00" - }, - { - "name": "nesbot/carbon", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "dad1ee0c17daac295ab225bcc24a1a8f1582a40e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dad1ee0c17daac295ab225bcc24a1a8f1582a40e", - "reference": "dad1ee0c17daac295ab225bcc24a1a8f1582a40e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" - }, - "require-dev": { - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", - "kylekatarnls/multi-tester": "^2.0", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", - "squizlabs/php_codesniffer": "^3.4" - }, - "default-branch": true, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2021-07-12T20:36:07+00:00" - }, - { - "name": "nette/schema", - "version": "v1.2.1", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", - "reference": "f5ed39fc96358f922cedfd1e516f0dadf5d2be0d", - "shasum": "" - }, - "require": { - "nette/utils": "^3.1.4 || ^4.0", - "php": ">=7.1 <8.1" - }, - "require-dev": { - "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", - "tracy/tracy": "^2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.1" - }, - "time": "2021-03-04T17:51:11+00:00" - }, - { - "name": "nette/utils", - "version": "v3.2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "43fbb3419a6688d0bc21bfecb17f79a3e002ffc0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/43fbb3419a6688d0bc21bfecb17f79a3e002ffc0", - "reference": "43fbb3419a6688d0bc21bfecb17f79a3e002ffc0", - "shasum": "" - }, - "require": { - "php": ">=7.2 <8.1" - }, - "conflict": { - "nette/di": "<3.0.6" - }, - "require-dev": { - "nette/tester": "~2.0", - "phpstan/phpstan": "^0.12", - "tracy/tracy": "^2.3" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2" - }, - "time": "2021-06-28T13:14:58+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.12.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/6608f01670c3cc5079e18c1dab1104e002579143", - "reference": "6608f01670c3cc5079e18c1dab1104e002579143", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.12.0" - }, - "time": "2021-07-21T10:44:31+00:00" - }, - { - "name": "opis/closure", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", - "shasum": "" - }, - "require": { - "php": "^5.4 || ^7.0 || ^8.0" - }, - "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.6.x-dev" - } - }, - "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, - "files": [ - "functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" - } - ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", - "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" - ], - "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" - }, - "time": "2021-04-09T13:42:10+00:00" - }, - { - "name": "orchestra/testbench", - "version": "6.x-dev", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "4e3ee38295d793f0d4864203d5e1f0b952635d1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/4e3ee38295d793f0d4864203d5e1f0b952635d1b", - "reference": "4e3ee38295d793f0d4864203d5e1f0b952635d1b", - "shasum": "" - }, - "require": { - "laravel/framework": "^8.26", - "mockery/mockery": "^1.4.2", - "orchestra/testbench-core": "^6.23", - "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^8.4 || ^9.3.3", - "spatie/laravel-ray": "^1.18" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", - "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v6.19.0" - }, - "funding": [ - { - "url": "https://paypal.me/crynobone", - "type": "custom" - }, - { - "url": "https://liberapay.com/crynobone", - "type": "liberapay" - } - ], - "time": "2021-07-01T02:50:07+00:00" - }, - { - "name": "orchestra/testbench-core", - "version": "6.x-dev", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "239bc0d99ae44f76c024e74ced0fc5aabfa00be3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/239bc0d99ae44f76c024e74ced0fc5aabfa00be3", - "reference": "239bc0d99ae44f76c024e74ced0fc5aabfa00be3", - "shasum": "" - }, - "require": { - "fakerphp/faker": "^1.9.1", - "php": "^7.3 || ^8.0", - "symfony/yaml": "^5.0", - "vlucas/phpdotenv": "^5.1" - }, - "require-dev": { - "laravel/framework": "^8.26", - "laravel/laravel": "8.x-dev", - "mockery/mockery": "^1.4.2", - "orchestra/canvas": "^6.1", - "phpunit/phpunit": "^8.4 || ^9.3.3 || ^10.0", - "spatie/laravel-ray": "^1.7.1", - "symfony/process": "^5.0" - }, - "suggest": { - "laravel/framework": "Required for testing (^8.26).", - "mockery/mockery": "Allow using Mockery for testing (^1.4.2).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^6.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^6.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^8.4|^9.3.3)." - }, - "default-branch": true, - "bin": [ - "testbench" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.0-dev" - } - }, - "autoload": { - "psr-4": { - "Orchestra\\Testbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" - }, - "funding": [ - { - "url": "https://paypal.me/crynobone", - "type": "custom" - }, - { - "url": "https://liberapay.com/crynobone", - "type": "liberapay" - } - ], - "time": "2021-07-14T02:34:48+00:00" - }, - { - "name": "phar-io/manifest", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" - }, - "time": "2021-02-23T14:00:09+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/a0eeab580cbdf4414fef6978732510a36ed0a9d6", - "reference": "a0eeab580cbdf4414fef6978732510a36ed0a9d6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/master" - }, - "time": "2021-06-25T13:47:51+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "8719cc12e2a57ec3432a76989bb4ef773ac75b63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8719cc12e2a57ec3432a76989bb4ef773ac75b63", - "reference": "8719cc12e2a57ec3432a76989bb4ef773ac75b63", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master" - }, - "time": "2021-04-23T09:50:58+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "550e0fb7efa2f7a361d47ea1e30921989a43e41d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/550e0fb7efa2f7a361d47ea1e30921989a43e41d", - "reference": "550e0fb7efa2f7a361d47ea1e30921989a43e41d", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.x" - }, - "time": "2021-07-24T09:21:39+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", - "shasum": "" - }, - "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^4.8.35 || ^5.7.27 || ^6.5.6 || ^7.0 || ^8.0 || ^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.7-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Graham Campbell", - "email": "graham@alt-three.com" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2020-07-20T17:29:33+00:00" - }, - { - "name": "phpspec/prophecy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" - }, - "time": "2021-03-17T13:42:18+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "17fb4d4fcb09d120cbdd9641bc47163e3ed73371" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/17fb4d4fcb09d120cbdd9641bc47163e3ed73371", - "reference": "17fb4d4fcb09d120cbdd9641bc47163e3ed73371", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-07-24T15:03:19+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:57:25+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e", - "reference": "a456d3ff472c5f69dc7d4a1622ae00ccfbd60b4e", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.3", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", - "sebastian/version": "^3.0.2" - }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.5-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ], - "files": [ - "src/Framework/Assert/Functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5" - }, - "funding": [ - { - "url": "https://phpunit.de/donate.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-07-24T14:55:07+00:00" - }, - { - "name": "psr/container", - "version": "1.1.x-dev", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.x" - }, - "time": "2021-03-05T17:36:06+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "aa4f89e91c423b516ff226c50dc83f824011c253" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/aa4f89e91c423b516ff226c50dc83f824011c253", - "reference": "aa4f89e91c423b516ff226c50dc83f824011c253", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "suggest": { - "fig/event-dispatcher-util": "Provides some useful PSR-14 utilities" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "source": "https://github.com/php-fig/event-dispatcher/tree/master" - }, - "time": "2021-02-08T21:15:39+00:00" - }, - { - "name": "psr/http-factory", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "36fa03d50ff82abcae81860bdaf4ed9a1510c7cd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/36fa03d50ff82abcae81860bdaf4ed9a1510c7cd", - "reference": "36fa03d50ff82abcae81860bdaf4ed9a1510c7cd", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" - }, - "time": "2020-09-17T16:52:55+00:00" - }, - { - "name": "psr/http-message", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", - "reference": "efd67d1dc14a7ef4fc4e518e7dee91c271d524e4", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2019-08-29T13:16:46+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "psr/simple-cache", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474", - "reference": "5a7b96b1dda5d957e01bc1bfe77dcca09c5a7474", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" - }, - "time": "2020-04-21T06:43:17+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8" - }, - "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Ramsey\\Collection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2021-01-21T17:40:04+00:00" - }, - { - "name": "ramsey/uuid", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "90a87a75432831ec4882ddea9cf49ee9127130ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/90a87a75432831ec4882ddea9cf49ee9127130ef", - "reference": "90a87a75432831ec4882ddea9cf49ee9127130ef", - "shasum": "" - }, - "require": { - "brick/math": "^0.8 || ^0.9", - "ext-json": "*", - "php": "^7.2 || ^8", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "1.0.0-alpha2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.18" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-ctype": "Enables faster processing of character classification using ctype functions.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, - "files": [ - "src/functions.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2021-04-23T16:12:51+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:49:45+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:52:38+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:24:23+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-11T13:31:12+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:17:30+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "abandoned": true, - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "2.3.x-dev", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "f24cbc541026c3bb7d27c647f0f9ea337135b22a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f24cbc541026c3bb7d27c647f0f9ea337135b22a", - "reference": "f24cbc541026c3bb7d27c647f0f9ea337135b22a", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-06-18T06:28:45+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", - "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "ext-json": "*", - "phpunit/phpunit": "^9.3", - "symfony/var-dumper": "^5.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2021-05-19T12:49:10+00:00" - }, - { - "name": "spatie/laravel-ray", - "version": "1.24.2", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ray.git", - "reference": "375881d1ec77a367cae75014a282e688666f51bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/375881d1ec77a367cae75014a282e688666f51bc", - "reference": "375881d1ec77a367cae75014a282e688666f51bc", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19", - "illuminate/database": "^7.20|^8.19", - "illuminate/queue": "^7.20|^8.19", - "illuminate/support": "^7.20|^8.19", - "php": "^7.3|^8.0", - "spatie/backtrace": "^1.0", - "spatie/ray": "^1.27.1", - "symfony/stopwatch": "4.2|^5.1", - "zbateson/mail-mime-parser": "^1.3.1" - }, - "require-dev": { - "facade/ignition": "^2.5", - "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19", - "orchestra/testbench-core": "^5.0|^6.0", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Spatie\\LaravelRay\\RayServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\LaravelRay\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Easily debug Laravel apps", - "homepage": "https://github.com/spatie/laravel-ray", - "keywords": [ - "laravel-ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.24.2" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2021-07-23T16:50:57+00:00" - }, - { - "name": "spatie/macroable", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/macroable.git", - "reference": "7a99549fc001c925714b329220dea680c04bfa48" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/7a99549fc001c925714b329220dea680c04bfa48", - "reference": "7a99549fc001c925714b329220dea680c04bfa48", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Macroable\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A trait to dynamically add methods to a class", - "homepage": "https://github.com/spatie/macroable", - "keywords": [ - "macroable", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/1.0.1" - }, - "time": "2020-11-03T10:15:05+00:00" - }, - { - "name": "spatie/ray", - "version": "1.28.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/ray.git", - "reference": "b800636fb022b93df53bd90fa52e5ed07221eb6a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/b800636fb022b93df53bd90fa52e5ed07221eb6a", - "reference": "b800636fb022b93df53bd90fa52e5ed07221eb6a", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "php": "^7.3|^8.0", - "ramsey/uuid": "^3.0|^4.1", - "spatie/backtrace": "^1.1", - "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1", - "symfony/var-dumper": "^4.2|^5.1" - }, - "require-dev": { - "illuminate/support": "6.x|^8.18", - "nesbot/carbon": "^2.43", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.9.16", - "spatie/phpunit-snapshot-assertions": "^4.2", - "spatie/test-time": "^1.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ray\\": "src" - }, - "files": [ - "src/helpers.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Debug with Ray to fix problems faster", - "homepage": "https://github.com/spatie/ray", - "keywords": [ - "ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.28.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2021-07-04T13:21:04+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "23e9ffaf6e8c716bce31bde1be708a405b1fbdf9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/23e9ffaf6e8c716bce31bde1be708a405b1fbdf9", - "reference": "23e9ffaf6e8c716bce31bde1be708a405b1fbdf9", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "time": "2021-04-10T06:08:01+00:00" - }, - { - "name": "symfony/console", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "c85b7001e8560e7e65978e93ec6e8d5b2bf453a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/c85b7001e8560e7e65978e93ec6e8d5b2bf453a8", - "reference": "c85b7001e8560e7e65978e93ec6e8d5b2bf453a8", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:43:48+00:00" - }, - { - "name": "symfony/css-selector", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/7fb120adc7f600a59027775b224c13a33530dd90", - "reference": "7fb120adc7f600a59027775b224c13a33530dd90", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:38:00+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "reference": "6f981ee24cf69ee7ce9736146d1c57c2780598a8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/main" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-12T14:48:14+00:00" - }, - { - "name": "symfony/error-handler", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "3ad2107e2fdabfaee52b0d64f57695dfa408c2f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/3ad2107e2fdabfaee52b0d64f57695dfa408c2f3", - "reference": "3ad2107e2fdabfaee52b0d64f57695dfa408c2f3", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.1", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "2eb48b003f7216ff7278cb48dc45d7cbec00f3ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/2eb48b003f7216ff7278cb48dc45d7cbec00f3ad", - "reference": "2eb48b003f7216ff7278cb48dc45d7cbec00f3ad", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "2.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "reference": "66bea3b09be61613cd3b4043a65a8ec48cfa6d2a", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-12T14:48:14+00:00" - }, - { - "name": "symfony/finder", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "26f71f3da2f83630986df0c2a520fa43c5673341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/26f71f3da2f83630986df0c2a520fa43c5673341", - "reference": "26f71f3da2f83630986df0c2a520fa43c5673341", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/http-client-contracts", - "version": "2.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca", - "reference": "7a2f0112e6d9f2be69e3bc9ce59c8d9dfe7f96ca", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-13T09:35:11+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "616e7c96a790c7a32435f3afc7788f620fec1cb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/616e7c96a790c7a32435f3afc7788f620fec1cb0", - "reference": "616e7c96a790c7a32435f3afc7788f620fec1cb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc", - "reference": "aa0b7e3f90cf33a6fd6fa9c67d9910d82555edbc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^5.3|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T10:05:29+00:00" - }, - { - "name": "symfony/mime", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05", - "reference": "ff62d282d6dd7cf89d85fe6bbf132dcbca4bec05", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:43:48+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/16880ba9c5ebe3642d1995ab866db29270b36535", - "reference": "16880ba9c5ebe3642d1995ab866db29270b36535", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/main" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:27:20+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9174a3d80210dca8daa7f31fec659150bbeabfc6", - "reference": "9174a3d80210dca8daa7f31fec659150bbeabfc6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/main" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T12:26:48+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-27T09:17:38+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fba8933c384d6476ab14fb7b8526e5287ca7e010", - "reference": "fba8933c384d6476ab14fb7b8526e5287ca7e010", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-02-19T12:13:01+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "19d03c391c6abb6791f5f757fb36e551bffeaa68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/19d03c391c6abb6791f5f757fb36e551bffeaa68", - "reference": "19d03c391c6abb6791f5f757fb36e551bffeaa68", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/main" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-13T14:34:27+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "files": [ - "bootstrap.php" - ], - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-05-21T13:25:03+00:00" - }, - { - "name": "symfony/process", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d16634ee55b895bd85ec714dadc58e4428ecf030", - "reference": "d16634ee55b895bd85ec714dadc58e4428ecf030", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:54:19+00:00" - }, - { - "name": "symfony/routing", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "71ab665a95f412a46426e39930facaad8b789983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/71ab665a95f412a46426e39930facaad8b789983", - "reference": "71ab665a95f412a46426e39930facaad8b789983", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "2.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "56b990c18120c91eaf0d38a93fabfa2a1f7fa413" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/56b990c18120c91eaf0d38a93fabfa2a1f7fa413", - "reference": "56b990c18120c91eaf0d38a93fabfa2a1f7fa413", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-13T09:35:11+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "b24c6a92c6db316fee69e38c80591e080e41536c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b24c6a92c6db316fee69e38c80591e080e41536c", - "reference": "b24c6a92c6db316fee69e38c80591e080e41536c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1.0|^2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/5.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-10T08:58:57+00:00" - }, - { - "name": "symfony/string", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "c29a3e649843f4a34eaa4be2683f4914e8b7f023" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/c29a3e649843f4a34eaa4be2683f4914e8b7f023", - "reference": "c29a3e649843f4a34eaa4be2683f4914e8b7f023", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "files": [ - "Resources/functions.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-06-27T12:34:25+00:00" - }, - { - "name": "symfony/translation", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "76def95773536a23b1f8caf69f5bdf56afda85a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/76def95773536a23b1f8caf69f5bdf56afda85a2", - "reference": "76def95773536a23b1f8caf69f5bdf56afda85a2", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation-contracts": "^2.3" - }, - "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" - }, - "provide": { - "symfony/translation-implementation": "2.3" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-kernel": "^5.0|^6.0", - "symfony/intl": "^4.4|^5.0|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T13:18:25+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "2.5.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "6e2aa82901f45c38761ba61c1082584ae6f5dbda" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/6e2aa82901f45c38761ba61c1082584ae6f5dbda", - "reference": "6e2aa82901f45c38761ba61c1082584ae6f5dbda", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-13T10:07:36+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "d823bfe53ac483ce080b279c2a1e438f01130a01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d823bfe53ac483ce080b279c2a1e438f01130a01", - "reference": "d823bfe53ac483ce080b279c2a1e438f01130a01", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-23T15:55:57+00:00" - }, - { - "name": "symfony/yaml", - "version": "5.4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "1eb028d50c9aff8d1e1720301051c476def4be79" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/1eb028d50c9aff8d1e1720301051c476def4be79", - "reference": "1eb028d50c9aff8d1e1720301051c476def4be79", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22" - }, - "conflict": { - "symfony/console": "<4.4" - }, - "require-dev": { - "symfony/console": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/5.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-07-21T12:43:48+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2020-07-12T23:59:07+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "f4f37098456b0801ee1de84214bbc83078ae3c63" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f4f37098456b0801ee1de84214bbc83078ae3c63", - "reference": "f4f37098456b0801ee1de84214bbc83078ae3c63", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/master" - }, - "time": "2021-05-20T14:26:08+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b83be80cedb862eeb030370cd7939f8333b1c496" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b83be80cedb862eeb030370cd7939f8333b1c496", - "reference": "b83be80cedb862eeb030370cd7939f8333b1c496", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.7.4", - "symfony/polyfill-ctype": "^1.17", - "symfony/polyfill-mbstring": "^1.17", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.3-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/master" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2021-05-23T15:53:44+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "1.5.6", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2020-11-12T00:07:28+00:00" - }, - { - "name": "webmozart/assert", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "b419d648592b0b8911cbbe10d450fe314f4fd262" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/b419d648592b0b8911cbbe10d450fe314f4fd262", - "reference": "b419d648592b0b8911cbbe10d450fe314f4fd262", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "default-branch": true, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/master" - }, - "time": "2021-06-19T13:45:26+00:00" - }, - { - "name": "zbateson/mail-mime-parser", - "version": "1.3.2", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "8eb590750772849189c7fa30ed52bcdcd2c9d1ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/8eb590750772849189c7fa30ed52bcdcd2c9d1ef", - "reference": "8eb590750772849189c7fa30ed52bcdcd2c9d1ef", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=5.4", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6.0", - "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MailMimeParser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - }, - { - "name": "Contributors", - "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" - } - ], - "description": "MIME email message parser", - "homepage": "https://mail-mime-parser.org", - "keywords": [ - "MimeMailParser", - "email", - "mail", - "mailparse", - "mime", - "mimeparse", - "parser", - "php-imap" - ], - "support": { - "docs": "https://mail-mime-parser.org/#usage-guide", - "issues": "https://github.com/zbateson/mail-mime-parser/issues", - "source": "https://github.com/zbateson/mail-mime-parser" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2021-07-08T19:06:28+00:00" - }, - { - "name": "zbateson/mb-wrapper", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", - "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", - "shasum": "" - }, - "require": { - "php": ">=5.4", - "symfony/polyfill-iconv": "^1.9", - "symfony/polyfill-mbstring": "^1.9" - }, - "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MbWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", - "keywords": [ - "charset", - "encoding", - "http", - "iconv", - "mail", - "mb", - "mb_convert_encoding", - "mbstring", - "mime", - "multibyte", - "string" - ], - "support": { - "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2020-10-21T22:14:27+00:00" - }, - { - "name": "zbateson/stream-decorators", - "version": "1.0.6", - "source": { - "type": "git", - "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "3403c4323bd1cd15fe54348b031b26b064c706af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/3403c4323bd1cd15fe54348b031b26b064c706af", - "reference": "3403c4323bd1cd15fe54348b031b26b064c706af", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=5.4", - "zbateson/mb-wrapper": "^1.0.0" - }, - "require-dev": { - "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\StreamDecorators\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "PHP psr7 stream decorators for mime message part streams", - "keywords": [ - "base64", - "charset", - "decorators", - "mail", - "mime", - "psr7", - "quoted-printable", - "stream", - "uuencode" - ], - "support": { - "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.0.6" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2021-07-08T19:01:59+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "phpunit/phpunit": 20 - }, - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": ">=5.4.0" - }, - "platform-dev": [], - "plugin-api-version": "2.0.0" -} From 94f589749323e4452d4eb0009949f0263fa2e34f Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 11:11:05 +0800 Subject: [PATCH 19/39] Fix contributing.md --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d4da4d3..7877330 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,3 +1,3 @@ # Contribution Guidelines -Please submit all issues and pull requests to [sedp-mis/base-grid-query](http://github.com/sedp-mis/base-grid-query) repository! :) \ No newline at end of file +Please submit all issues and pull requests to [ajcastro/searchable](https://github.com/ajcastro/searchable) repository! :) From 753c19e2991d1f63aed9c05c1598acebb2d8c571 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 11:41:41 +0800 Subject: [PATCH 20/39] Update README --- README.md | 84 ++++++++++++++++++++++--------------------------------- 1 file changed, 33 insertions(+), 51 deletions(-) diff --git a/README.md b/README.md index 78e9450..fa352a2 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,17 @@ # Searchable -Pattern matching search and reusable queries in laravel. +Pattern-matching search for Laravel eloquent models. - Currently supports MySQL only. - Helpful for complex table queries with multiple joins and derived columns. -- Reusable queries and column definitions. +- Fluent columns definitions. ## Overview -### Pattern-matching search on eloquent models - Simple setup for searchable model and can search on derived columns. ```php -use AjCastro\Searchable\Searchable; +use AjCastro\Searchable\Search\SublimeSearch; class Post { @@ -56,18 +54,17 @@ Your code can look like this: ```php class PostsController { - public function index() + public function index(Request $request) { - return Post::sortByRelevance(!request()->bool('sort_by')) - ->search(request('search')) - ->when(Post::isColumnValid($sortColumn = request('sort_by')), function ($query) use ($sortColumn) { + $query = Post::query(); + + return $query + ->sortByRelevance(! $request->has('sort_by')) + ->search($request->search) + ->when($query->getModel()->isColumnValid($request->sort_by), function ($query) use ($request) { $query->orderBy( - \DB::raw( - (new Post)->getSortableColumn($sortColumn) ?? // valid sortable column - (new Post)->searchQuery()->getColumn($sortColumn) ?? // valid search column - $sortColumn // valid original table column - ), - request()->bool('descending') ? 'desc' : 'asc' + DB::raw($query->getModel()->getColumn($request->sort_by)), + $request->descending ? 'desc' : 'asc' ); }) ->paginate(); @@ -195,36 +192,15 @@ class Post { // Usage -Post::search('A post title')->orderBy(Post::getSortableColumn('status_name')); +Post::search('A post title')->orderBy(Post::make()->getSortableColumn('status_name')); // This will only perform search on `posts`.`title` column and it will append "order by `statuses`.`name`" in the query. // This is beneficial if your column is mapped to a different column name coming from front-end request. ``` -### Custom Search Query - Exact Search Example - -You can extend the class `AjCastro\Searchable\Search\SublimeSearch` a.k.a a fuzzy-search implementation. - -```php -namespace App; - -use AjCastro\Searchable\Search\SublimeSearch; - -class ExactSearch extends SublimeSearch -{ - /** - * {@inheritDoc} - */ - protected function parseSearchStr($searchStr) - { - return $searchStr; // produces "where `column` like '{$searchStr}'" - // or - return "%{$searchStr}%"; // produces "where `column` like '%{$searchStr}%'" - } -} -``` +### Custom Search String Parser - Exact Search Example -then use it in the model: +Override the `deafultSearchQuery` in the model like so: ```php namespace App; @@ -233,7 +209,11 @@ class User extends Model { public function defaultSearchQuery() { - return new ExactSearch($this, $this->searchableColumns(), $this->sortByRelevance, 'where'); + return BaseSearch::make($this->buildSearchableColumns()) + ->parseUsing(function ($searchStr) { + return $searchStr; // produces "where `column` like '{$searchStr}'" + return "%{$searchStr}%"; // produces "where `column` like '%{$searchStr}%'" + }); } } ``` @@ -257,27 +237,29 @@ Usually we have queries that has a derived columns like our example for `Post`'s Sometimes we need to sort our query results by this column. ```php -Post::search('Some search')->orderBy(Post::searchQuery()->author_full_name, 'desc')->paginate(); -Post::search('Some search')->where(Post::searchQuery()->author_full_name, 'William%')->paginate(); +$query = Post::query(); +$post = $query->getModel(); +$query->search('Some search')->orderBy($post->getColumn('author_full_name'), 'desc')->paginate(); +$query->search('Some search')->where($post->getColumn('author_full_name'), 'William%')->paginate(); ``` -## Helper methods available on model +## Helper methods available -### isColumnValid [static] +### TableColumns::get() [static] -- Identifies if the column is a valid column, either a regular table column or derived column. -- Useful for checking valid columns to avoid sql injection especially in `orderBy` query. +- Get the table columns. ```php -Post::isColumnValid(request('sort_by')); +TableColumns::get('posts'); ``` -### getTableColumns [static] +### isColumnValid -- Get the table columns. +- Identifies if the column is a valid column, either a regular table column or derived column. +- Useful for checking valid columns to avoid sql injection especially in `orderBy` query, [see post](https://freek.dev/1317-an-important-security-release-for-laravel-query-builder). ```php -Post::getTableColumns(); +$query->getModel()->isColumnValid(request('sort_by')); ``` ### enableSearchable @@ -328,7 +310,7 @@ $query->search('foo'); ## Warning Calling `select()` after `search()` will overwrite `sort_index` field, so it is recommended to call `select()` -before `search()`. +before `search()`. Or you can use `addSelect()` instead. ## Credits From f473578f735f63064bb0a3265ceaefe88d71aeb1 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 11:57:31 +0800 Subject: [PATCH 21/39] Add method docblock --- src/Searchable.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Searchable.php b/src/Searchable.php index aa0db4f..40aac89 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -2,6 +2,10 @@ namespace AjCastro\Searchable; +/** + * @method \Illuminate\Database\Eloquent\Builder sortByRelevance($sortByRelevance = true) + * @method \Illuminate\Database\Eloquent\Builder search($search) + */ trait Searchable { use WithSearchableColumns; From 0cc02bf355c00563add954f961a76acb1e193075 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 13:28:30 +0800 Subject: [PATCH 22/39] Fix sortByRelevance implementation --- README.md | 8 ++++---- src/BaseSearch.php | 44 +++++--------------------------------------- src/Searchable.php | 6 +++++- 3 files changed, 14 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index fa352a2..92283b8 100644 --- a/README.md +++ b/README.md @@ -59,8 +59,8 @@ class PostsController $query = Post::query(); return $query - ->sortByRelevance(! $request->has('sort_by')) ->search($request->search) + ->sortByRelevance(! $request->has('sort_by')) ->when($query->getModel()->isColumnValid($request->sort_by), function ($query) use ($request) { $query->orderBy( DB::raw($query->getModel()->getColumn($request->sort_by)), @@ -138,12 +138,12 @@ Post::where('likes', '>', 100)->search('Some post')->paginate(); ``` This will addSelect field `sort_index` which will used to order or sort by relevance. -If you want to disable sort by relevance, call method `sortByRelevance(false)` before `search()` method. +If you want to sort by relevance, call method `sortByRelevance()` after `search()` method. Example: ``` -Post::sortByRelevance(false)->search('Some post')->paginate(); -Post::sortByRelevance(false)->where('likes', '>', 100)->search('Some post')->paginate(); +Post::search('Some post')->sortByRelevance()->paginate(); +Post::where('likes', '>', 100)->search('Some post')->sortByRelevance()->paginate(); ``` ### Set searchable configurations on runtime. diff --git a/src/BaseSearch.php b/src/BaseSearch.php index 19497f1..f5ac6f3 100644 --- a/src/BaseSearch.php +++ b/src/BaseSearch.php @@ -47,11 +47,9 @@ class BaseSearch */ protected bool $sortByRelevance = true; - public function __construct(Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') + public function __construct(Columns $columns) { $this->columns = $columns; - $this->sortByRelevance($sortByRelevance); - $this->searchOperator = $searchOperator; } public static function make(Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') @@ -85,10 +83,6 @@ public function search($searchStr) $method = $this->searchOperator . 'Raw'; $query->{$method}('(' . join(' OR ', $conditions) . ')'); - if ($this->shouldSortByRelevance()) { - $this->applySortByRelevance(); - } - return $query; } @@ -156,34 +150,6 @@ public function setSearchOperator($searchOperator) return $this; } - /** - * Set sort by relevance boolean. - * - * @param bool $bool - * @return $this - */ - public function sortByRelevance($sortByRelevance = true) - { - $this->sortByRelevance = $sortByRelevance; - - return $this; - } - - /** - * Whether this search query should sort by relevance with key of `sort_index`. - * - * @return boolean - */ - public function shouldSortByRelevance() - { - return $this->sortByRelevance; - } - - public function applySortByRelevance() - { - SortByRelevance::sort($this->query, $this->sortColumns(), $this->searchStr); - } - /** * Return the searchable columns to compare, actual columns for `where` operator and alias column names for `having` operator. * @@ -195,12 +161,12 @@ public function columnsToCompare() } /** - * Return the columns for sorting query. + * Return the search string. * - * @return array + * @return string */ - protected function sortColumns() + public function getSearchStr() { - return $this->columns->keys(); + return $this->searchStr; } } diff --git a/src/Searchable.php b/src/Searchable.php index 40aac89..d96089a 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -113,6 +113,10 @@ public function scopeSearch($query, $search) */ public function scopeSortByRelevance($query, $sortByRelevance = true) { - $query->getModel()->searchQuery()->sortByRelevance($sortByRelevance); + $sortByRelevance && SortByRelevance::sort( + $query, + $this->buildAllColumns()->actual(), + $query->getModel()->searchQuery()->getSearchStr() + ); } } From 8c368e9beb0079b9fb5e1717e5f2a777f4c97339 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 13:30:03 +0800 Subject: [PATCH 23/39] Add demo project in readme --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 92283b8..3598dfd 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,10 @@ Pattern-matching search for Laravel eloquent models. - Helpful for complex table queries with multiple joins and derived columns. - Fluent columns definitions. +## Demo Project + +See [demo project](https://github.com/ajcastro/searchable-demo). + ## Overview Simple setup for searchable model and can search on derived columns. From 426dc1bfd66e0787524df71e774e0161b13137a6 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 13:44:23 +0800 Subject: [PATCH 24/39] Update readme --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 3598dfd..ba8658f 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,12 @@ class PostsController $query = Post::query(); return $query + ->with('author') + ->when($request->parse_using === 'exact', function ($query) { + $query->getModel()->searchQuery()->parseUsing(function ($searchStr) { + return "%{$searchStr}%"; + }); + }) ->search($request->search) ->sortByRelevance(! $request->has('sort_by')) ->when($query->getModel()->isColumnValid($request->sort_by), function ($query) use ($request) { From b2d3ad9a0f7dcf19b9497ea7523b947d83f5216a Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 13:52:07 +0800 Subject: [PATCH 25/39] Update readme --- README.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ba8658f..7fd107a 100644 --- a/README.md +++ b/README.md @@ -70,13 +70,18 @@ class PostsController }); }) ->search($request->search) - ->sortByRelevance(! $request->has('sort_by')) - ->when($query->getModel()->isColumnValid($request->sort_by), function ($query) use ($request) { - $query->orderBy( - DB::raw($query->getModel()->getColumn($request->sort_by)), - $request->descending ? 'desc' : 'asc' - ); - }) + ->when( + $request->has('sort_by') && $query->getModel()->isColumnValid($request->sort_by), + function ($query) use ($request) { + $query->orderBy( + DB::raw($query->getModel()->getColumn($request->sort_by)), + $request->descending ? 'desc' : 'asc' + ); + }, + function ($query) { + $query->sortByRelevance(); + }, + ) ->paginate(); } From 2ae9c8d40e48c5627a43b674797ec82cf74aedc5 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 13:53:27 +0800 Subject: [PATCH 26/39] Add CHANGELOG.md --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..16bcca2 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,20 @@ +# Changelog + +All notable changes to `ajcastro/searchable` will be documented in this file + +## 2.0.0 (2021-07-25) + +### Added +- Added `\AjCastro\Searchable\Columns`. +- Added `\AjCastro\Searchable\TableColumns`. +- Added `\AjCastro\Searchable\SearchParsers\*` classes. +- Added `\AjCastro\Searchable\BaseSearch`, simplified base search query decorator. +- Added `\AjCastro\Searchable\BaseSearch::parseUsing(callable $callback)` method using custom search string parsing. + +### Changed +- Moved $searchable property methods to separate trait `\AjCastro\Searchable\WithSearchableColumns`. +- Improved implementation of `searchByRelevance()` scope query, it is not called by default and should be called explicitly. +- Change method `\AjCastro\Searchable\Searchable::isColumnValid($column)` to non-static/instance method. + +### Removed +- Remove method `\AjCastro\Searchable\Searchable::getTableColumns()`. From 1ad36f40972cc9916d11b43ce8968d05b3e95373 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:07:03 +0800 Subject: [PATCH 27/39] Fix --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7fd107a..488b7a1 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,7 @@ class PostsController return $query ->with('author') + // advance usage with custom search string parsing ->when($request->parse_using === 'exact', function ($query) { $query->getModel()->searchQuery()->parseUsing(function ($searchStr) { return "%{$searchStr}%"; From bfbcbc4fba170e9663dc9291b050f8266c62be3c Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:10:55 +0800 Subject: [PATCH 28/39] Fix --- .phpunit.result.cache | 1 - src/BaseSearch.php | 13 ++----------- 2 files changed, 2 insertions(+), 12 deletions(-) delete mode 100644 .phpunit.result.cache diff --git a/.phpunit.result.cache b/.phpunit.result.cache deleted file mode 100644 index f0074ff..0000000 --- a/.phpunit.result.cache +++ /dev/null @@ -1 +0,0 @@ -{"version":1,"defects":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":3,"Tests\\ColumnsTest::test_selects_can_return_correct_select":4,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":4,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":3,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":3,"Tests\\SearchableTest::test_Searchable_getColumn":3,"Tests\\SearchableTest::test_Searchable_isColumnValid":3},"times":{"Tests\\ColumnsTest::test_find_can_return_the_actual_column":0.005,"Tests\\ColumnsTest::test_selects_can_return_correct_select":0.005,"Tests\\ColumnsTest::test_keys_should_return_correct_keys":0.005,"Tests\\BaseSearchTest::test_can_initialize_base_search":0.078,"Tests\\BaseSearchTest::test_can_initialize_base_search_and_perform_a_search":0.085,"Tests\\ColumnsTest::test_actual_should_return_correct_actual_columns":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_where":0.006,"Tests\\BaseSearchTest::test_columns_to_compare_using_having":0.005,"Tests\\SearchableTest::test_Searchable_getColumn":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\SearchableTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\SearchableTest::test_Searchable_isColumnValid_from_sortable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_getColumn_from_searchable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_isColumnValid_from_searchable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_getColumn_from_sortable_columns":0.005,"Tests\\WithSearchableColumnsTest::test_Searchable_isColumnValid_from_sortable_columns":0.005}} \ No newline at end of file diff --git a/src/BaseSearch.php b/src/BaseSearch.php index f5ac6f3..def07fb 100644 --- a/src/BaseSearch.php +++ b/src/BaseSearch.php @@ -6,7 +6,6 @@ use AjCastro\Searchable\SearchParsers\CustomSearch; use AjCastro\Searchable\SearchParsers\FuzzySearch; use AjCastro\Searchable\SearchParsers\ParserInterface; -use AjCastro\Searchable\SortByRelevance; use Illuminate\Database\Eloquent\Builder; class BaseSearch @@ -39,22 +38,14 @@ class BaseSearch */ protected ParserInterface $defaultParser; - /** - * If searching will be sorted by _score. - * This is the relevance score of the search string. - * - * @var bool - */ - protected bool $sortByRelevance = true; - public function __construct(Columns $columns) { $this->columns = $columns; } - public static function make(Columns $columns, bool $sortByRelevance = true, $searchOperator = 'where') + public static function make(Columns $columns) { - return new static($columns, $sortByRelevance, $searchOperator); + return new static($columns); } /** From 4ac24d675cbeefa9175174d0480c8e77239fe646 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:19:52 +0800 Subject: [PATCH 29/39] Update readme --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 488b7a1..2749342 100644 --- a/README.md +++ b/README.md @@ -255,8 +255,13 @@ Sometimes we need to sort our query results by this column. ```php $query = Post::query(); $post = $query->getModel(); -$query->search('Some search')->orderBy($post->getColumn('author_full_name'), 'desc')->paginate(); -$query->search('Some search')->where($post->getColumn('author_full_name'), 'William%')->paginate(); +$query->search('Some search')->orderBy($post->getColumn('author_full_name'), 'desc')->paginate(); // (A) +$query->search('Some search')->where($post->getColumn('author_full_name'), 'William%')->paginate(); // (B) +``` +which may output to +```sql +select * from posts where ... order by CONCAT(authors.first_name, " ", authors.last_name) desc limit 15, 0; -- (A) +select * from posts where CONCAT(authors.first_name, " ", authors.last_name) like 'William%'; -- (B) ``` ## Helper methods available From 97122365cd0907c32e7059f29aebdced469e472d Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:20:31 +0800 Subject: [PATCH 30/39] Fix --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 2749342..78dbf36 100644 --- a/README.md +++ b/README.md @@ -255,13 +255,17 @@ Sometimes we need to sort our query results by this column. ```php $query = Post::query(); $post = $query->getModel(); -$query->search('Some search')->orderBy($post->getColumn('author_full_name'), 'desc')->paginate(); // (A) -$query->search('Some search')->where($post->getColumn('author_full_name'), 'William%')->paginate(); // (B) +// (A) +$query->search('Some search')->orderBy($post->getColumn('author_full_name'), 'desc')->paginate(); +// (B) +$query->search('Some search')->where($post->getColumn('author_full_name'), 'William%')->paginate(); ``` which may output to ```sql -select * from posts where ... order by CONCAT(authors.first_name, " ", authors.last_name) desc limit 15, 0; -- (A) -select * from posts where CONCAT(authors.first_name, " ", authors.last_name) like 'William%'; -- (B) +-- (A) +select * from posts where ... order by CONCAT(authors.first_name, " ", authors.last_name) desc limit 15, 0; +-- (B) +select * from posts where CONCAT(authors.first_name, " ", authors.last_name) like 'William%'; ``` ## Helper methods available From b303673079a0373a53e971033c5fa85c1f698e16 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:22:49 +0800 Subject: [PATCH 31/39] Fix --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 78dbf36..66914a0 100644 --- a/README.md +++ b/README.md @@ -263,9 +263,9 @@ $query->search('Some search')->where($post->getColumn('author_full_name'), 'Will which may output to ```sql -- (A) -select * from posts where ... order by CONCAT(authors.first_name, " ", authors.last_name) desc limit 15, 0; +select * from posts where ... order by CONCAT(authors.first_name, " ", authors.last_name) desc limit 0, 15; -- (B) -select * from posts where CONCAT(authors.first_name, " ", authors.last_name) like 'William%'; +select * from posts where ... and CONCAT(authors.first_name, " ", authors.last_name) like 'William%' limit 0, 15; ``` ## Helper methods available From 7f31f9f23e05201ee9b1cfcf9c02fddedfe7fd0c Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 14:24:14 +0800 Subject: [PATCH 32/39] Fix --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 66914a0..2643a88 100644 --- a/README.md +++ b/README.md @@ -153,8 +153,9 @@ Post::where('likes', '>', 100)->search('Some post')->paginate(); ``` -This will addSelect field `sort_index` which will used to order or sort by relevance. If you want to sort by relevance, call method `sortByRelevance()` after `search()` method. +This will addSelect field `sort_index` which will be used to order or sort by relevance. + Example: ``` From f69b48dc8840762dd71165fcd9d37f1beb8d228c Mon Sep 17 00:00:00 2001 From: Arjon Jason Castro Date: Sun, 25 Jul 2021 14:56:22 +0800 Subject: [PATCH 33/39] Update composer.json --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index effbd25..6e209ff 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "ajcastro/searchable", "description": "Pattern-matching search for Laravel eloquent models.", - "keywords": ["laravel", "laravel-package", "query", "query-builder", "patter-matching-search", "eloquent-search"], + "keywords": ["laravel", "laravel-package", "query", "query-builder", "pattern-matching-search", "eloquent-search"], "license": "MIT", "authors": [ { From 76a29e688c042091d931bbe12150501d40f0e586 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 15:01:28 +0800 Subject: [PATCH 34/39] Fix --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 2643a88..4bdecd1 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,6 @@ See [demo project](https://github.com/ajcastro/searchable-demo). Simple setup for searchable model and can search on derived columns. ```php -use AjCastro\Searchable\Search\SublimeSearch; - class Post { use Searchable; @@ -220,7 +218,7 @@ Post::search('A post title')->orderBy(Post::make()->getSortableColumn('status_na Override the `deafultSearchQuery` in the model like so: ```php -namespace App; +use AjCastro\Searchable\BaseSearch; class User extends Model { From 5eb39ca8be1c47d2ac37f42c81f308196138e1b5 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 15:02:26 +0800 Subject: [PATCH 35/39] Fix --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4bdecd1..cf5744a 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ See [demo project](https://github.com/ajcastro/searchable-demo). Simple setup for searchable model and can search on derived columns. ```php +use AjCastro\Searchable\Searchable; + class Post { use Searchable; From cbb8ed26fcbaa9c9219351b9bdc6a0aff2c0de11 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 21:42:10 +0800 Subject: [PATCH 36/39] Fix --- src/Searchable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Searchable.php b/src/Searchable.php index d96089a..987fc61 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -17,7 +17,7 @@ trait Searchable /** * Apply searchable joins for the search query. * - * @param $query + * @param \Illuminate\Database\Eloquent\Builder $query * @return void */ protected function applySearchableJoins($query) From 6d4e9ff6225f302bf8a4433f8aa10a2c05742cf9 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Sun, 25 Jul 2021 21:50:42 +0800 Subject: [PATCH 37/39] Fix --- src/Searchable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Searchable.php b/src/Searchable.php index 987fc61..e27e074 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -115,7 +115,7 @@ public function scopeSortByRelevance($query, $sortByRelevance = true) { $sortByRelevance && SortByRelevance::sort( $query, - $this->buildAllColumns()->actual(), + $this->buildSearchableColumns()->actual(), $query->getModel()->searchQuery()->getSearchStr() ); } From 49f4db543bd4089a9786dfe8192b2aede8903d7c Mon Sep 17 00:00:00 2001 From: ajcastro Date: Tue, 27 Jul 2021 16:09:00 +0800 Subject: [PATCH 38/39] Add scope query parseUsing() --- CHANGELOG.md | 8 ++++++++ README.md | 2 +- src/Searchable.php | 12 ++++++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 16bcca2..88fba64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to `ajcastro/searchable` will be documented in this file +## 2.0.1 (2021-07-28) + +### Added +- Added scope method `parseUsing()` to override the default fuzzy search. + ## 2.0.0 (2021-07-25) ### Added @@ -18,3 +23,6 @@ All notable changes to `ajcastro/searchable` will be documented in this file ### Removed - Remove method `\AjCastro\Searchable\Searchable::getTableColumns()`. +- Remove `AjCastro\Searchable\Search\SublimeSearch`. +- Remove `AjCastro\Searchable\BaseGridQuery`. +- Remove `AjCastro\Searchable\BaseSearchQuery`. diff --git a/README.md b/README.md index cf5744a..f759087 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ class PostsController ->with('author') // advance usage with custom search string parsing ->when($request->parse_using === 'exact', function ($query) { - $query->getModel()->searchQuery()->parseUsing(function ($searchStr) { + $query->parseUsing(function ($searchStr) { return "%{$searchStr}%"; }); }) diff --git a/src/Searchable.php b/src/Searchable.php index e27e074..a3118f5 100644 --- a/src/Searchable.php +++ b/src/Searchable.php @@ -119,4 +119,16 @@ public function scopeSortByRelevance($query, $sortByRelevance = true) $query->getModel()->searchQuery()->getSearchStr() ); } + + /** + * Override search string parser + * + * @param \Illuminate\Database\Eloquent\Builder $query + * @param callable $parser + * @return void + */ + public function scopeParseUsing($query, callable $parser) + { + $query->getModel()->searchQuery()->parseUsing($parser); + } } From 2a8bac28484104b1d7e6570aaa2de08296582b43 Mon Sep 17 00:00:00 2001 From: ajcastro Date: Tue, 27 Jul 2021 16:10:00 +0800 Subject: [PATCH 39/39] Fix --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88fba64..c62c9c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to `ajcastro/searchable` will be documented in this file ## 2.0.1 (2021-07-28) ### Added -- Added scope method `parseUsing()` to override the default fuzzy search. +- Added scope method `\AjCastro\Searchable\Searchable::scopeParseUsing()` to override the default fuzzy search. ## 2.0.0 (2021-07-25)