diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b914550..7c56835 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,6 @@ jobs: php: - '8.1' - '8.0' - - '7.4' laravel: - '8.*' testbench: @@ -45,4 +44,4 @@ jobs: composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest - name: Execute tests - run: vendor/bin/phpunit tests \ No newline at end of file + run: vendor/bin/pest tests \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4ae1c4..de1d3d2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,9 +42,9 @@ If the project maintainer has any additional requirements, you will find them li - **[PSR-2 Coding Standard](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md)** - The easiest way to apply the conventions is to install [PHP Code Sniffer](https://pear.php.net/package/PHP_CodeSniffer). -- **Add tests!** - Your patch won't be accepted if it doesn't have tests. +- **Add tests!** - Your pull request won't be accepted if it doesn't have tests. When implementing new tests, please use the Pest PHP framework. You can find examples and detailed documentation at [pestphp.com](https://pestphp.com/). -- **Document any change in behaviour** - Make sure the `README.md` and any other relevant documentation are kept up-to-date. +- **Document any change in behaviour** - Make sure the `README.md` is kept up-to-date. If you implement a new feature or propose significant changes to an existing feature, you will have to provide the documentation for these as well. The maintainers of the project will inform you about the process if necessary. - **Consider our release cycle** - We try to follow [SemVer v2.0.0](https://semver.org/). Randomly breaking public APIs is not an option. @@ -52,4 +52,4 @@ If the project maintainer has any additional requirements, you will find them li - **Send coherent history** - Make sure each individual commit in your pull request is meaningful. If you had to make multiple intermediate commits while developing, please [squash them](https://www.git-scm.com/book/en/v2/Git-Tools-Rewriting-History#Changing-Multiple-Commit-Messages) before submitting. -**Happy coding**! +**Happy coding!** 🚀! diff --git a/README.md b/README.md index 08b4a9d..a51f4be 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ -

Laravel Notion API

-

Effortless Notion integrations with Laravel

+

Notion for Laravel

-

- -

+ [![Latest Version on Packagist](https://img.shields.io/packagist/v/fiveam-code/laravel-notion-api.svg?style=flat-square)](https://packagist.org/packages/fiveam-code/laravel-notion-api) [![Total Downloads](https://img.shields.io/packagist/dt/fiveam-code/laravel-notion-api.svg?style=flat-square)](https://packagist.org/packages/fiveam-code/laravel-notion-api) @@ -14,90 +11,156 @@ This package provides a simple and crisp way to access the Notion API endpoints, ## Installation -You can install the package via composer: +The package is compatible with Laravel 8, 9 and 10 with their respective PHP versions. -```bash -composer require fiveam-code/laravel-notion-api -``` +1. Install the package via composer: -### Authorization + ```bash + composer require fiveam-code/laravel-notion-api + ``` -The Notion API requires an access token and a Notion integration, [the Notion documentation](https://developers.notion.com/docs/getting-started#before-we-begin) explains how this works. It's important to grant access to the integration within your Notion account to enable the API access. +2. Get your Notion API access token like explained in [their documentation](https://developers.notion.com/). It's also + important to grant access to the integration within your Notion pages, which is described in the developer + documentation at Notion as well. -Add your Notion API token to your `.env` file: +3. Add a new line to your applications `.env` file: -``` -NOTION_API_TOKEN="$YOUR_ACCESS_TOKEN" -``` + ```bash + NOTION_API_TOKEN="$YOUR_ACCESS_TOKEN" + ``` -## Usage +4. You're ready to go! You can now access Notion endpoints through the `Notion` facade: -Head over to the [Documentation](https://5amco.de/docs) of this package. + ```php + use \Notion; -### 🔥 Code Examples to jumpstart your Notion API Project + Notion::databases()->find("8284f3ff77e24d4a939d19459e4d6bdc"); + ``` -#### Basic Setup (+ example) -```php -use FiveamCode\LaravelNotionApi\Notion; + That's it. + +For detailed usage information and a list of available endpoints see (the docs). + +## Examples -# Access through Facade (token has to be set in .env) -\Notion::databases()->find($databaseId); +All examples refer to our test database, which you can +find [here](https://dianawebdev.notion.site/8284f3ff77e24d4a939d19459e4d6bdc?v=bc3a9ce8cdb84d3faefc9ae490136ac2). -# Custom instantiation (necessary if you want to access more than one NotionApi integration) -$notion = new Notion($apiToken, $apiVersion); // version-default is 'v1' -$notion->databases()->find($databaseId); +### Fetch a Notion Database + +The `databases()->find()` method returns a `FiveamCode\LaravelNotionApi\Entities\Database` object, +which contains all the information about the database, including its properties and the possible values for each +property. + +```php +use \Notion; + +Notion::databases() + ->find("8284f3ff77e24d4a939d19459e4d6bdc"); ``` -#### Fetch Page Information +### Fetch a Notion Page + +The `pages()->find()` method returns a `FiveamCode\LaravelNotionApi\Entities\Page` object, +which contains all the information about the page, including its properties and the possible values for each property. + ```php -// Returns a specific page -\Notion::pages()->find($yourPageId); +Notion::pages() + ->find("e7e5e47d-23ca-463b-9750-eb07ca7115e4"); ``` -#### Search +### Search + +The `search()` endpoint returns a collection of pages that match the search query. The scope of the search is limited to +the workspace that the integration is installed in +and the pages that are shared with the integration. + ```php -// Returns a collection pages and databases of your workspace (included in your integration-token) -\Notion::search($searchText) +Notion::search("Search term") ->query() ->asCollection(); ``` -#### Query Database +### Query Database + +The `database()` endpoint allows you to query a specific database and returns a collection of pages (= database +entries). +You can filter and sort the results and limit the number of returned entries. For detailed information about the +available +filters and sorts, please refer to the [documentation](https://developers.notion.com/reference/post-database-query). ```php -// Queries a specific database and returns a collection of pages (= database entries) -$sortings = new Collection(); -$filters = new Collection(); - -$sortings - ->add(Sorting::propertySort('Ordered', 'ascending')); -$sortings - ->add(Sorting::timestampSort('created_time', 'ascending')); - -$filters - ->add(Filter::textFilter('title', ['contains' => 'new'])); -// or -$filters - ->add(Filter::rawFilter('Tags', ['multi_select' => ['contains' => 'great']])); - -\Notion::database($yourDatabaseId) - ->filterBy($filters) // filters are optional - ->sortBy($sortings) // sorts are optional - ->limit(5) // limit is optional - ->query() - ->asCollection(); +use FiveamCode\LaravelNotionApi\Query\Filters\Filter; +use FiveamCode\LaravelNotionApi\Query\Filters\Operators; + +$nameFilter = Filter::textFilter('Name', Operators::EQUALS, 'Ada Lovelace'); + +\Notion::database("8284f3ff77e24d4a939d19459e4d6bdc") + ->filterBy($nameFilter) + ->limit(5) + ->query() + ->asCollection(); ``` +Compound filters for AND or OR queries are also available: + +```php +use Illuminate\Support\Collection; +use FiveamCode\LaravelNotionApi\Query\Filters\Filter; +use FiveamCode\LaravelNotionApi\Query\Filters\FilterBag; +use FiveamCode\LaravelNotionApi\Query\Filters\Operators; +use FiveamCode\LaravelNotionApi\Query\Sorting; + +# Give me all entries that are +# (KnownFor == UNIVAC || KnownFor == ENIAC) +# and sort them by name ascending + +$filterBag = new FilterBag(Operators::AND); + +$filterBag->addFilter( + Filter::rawFilter("Known for", [ + "multi_select" => [Operators::CONTAINS => "UNIVAC"], + ]) +); + +$filterBag->addFilter( + Filter::rawFilter("Known for", [ + "multi_select" => [Operators::CONTAINS => "ENIAC"], + ]) +); + +\Notion::database("8284f3ff77e24d4a939d19459e4d6bdc") + ->filterBy($filterBag) + ->sortBy(Sorting::propertySort('Name', 'ascending')) + ->limit(5) + ->query() + ->asCollection(); +``` -### Testing +### Testing (pestphp) + +You can find even more usage examples by checking out the package tests in the `/tests` directory. +The tests are making use of Pest PHP and we are working on switching from PHPUNIT to it (todo sentence). + +If you want to run the tests in your CLI: ```bash -vendor/bin/phpunit tests +vendor/bin/pest tests ``` ## Support -If you use this package in one of your projects or just want to support our development, consider becoming a [Patreon](https://www.patreon.com/bePatron?u=56662485)! +If you use this package in one of your projects or want to support our development, consider becoming +a [Patreon Supporter](https://www.patreon.com/bePatron?u=56662485)! + +### Supported by Tinkerwell + + +Tinkerwell
+
+ +The development of this package is supported by [Tinkerwell](https://tinkerwell.app/). + ## Contributing @@ -107,19 +170,15 @@ Please see [CONTRIBUTING](CONTRIBUTING.md) for details. If you discover any security related issues, please email hello@dianaweb.dev instead of using the issue tracker. -## Used By - -- Julien Nahum created [notionforms.io](https://notionforms.io) with [laravel-notion-api](https://github.com/5am-code/laravel-notion-api), which allows you to easily create custom forms, based on your selected database within notion. -- [GitHub Notion Sync](https://githubnotionsync.com/), a service by [Beyond Code](https://beyondco.de) to sync the issues of multiple GitHub repositories into a Notion database -- [Notion Invoice](https://notioninvoice.com/), the first premium invoicing solution for freelancers and businesses that use Notion. Create beautiful PDF invoices from your Notion data. - -Using this package in your project? Open a PR to add it in this section! - ## Credits - [Diana Scharf](https://github.com/mechelon) - [Johannes Güntner](https://github.com/johguentner) +

+ +

+ ## License The MIT License (MIT). Please see [License File](LICENSE.md) for more information. diff --git a/composer.json b/composer.json index a2b6c2e..8e23c63 100644 --- a/composer.json +++ b/composer.json @@ -25,12 +25,14 @@ } ], "require": { - "php": "^7.4|^8.0", + "php": "^8.0", "guzzlehttp/guzzle": "^7.0.1", - "illuminate/support": "^8.0|^9.0" + "illuminate/support": "^8.0|^9.0|^10.0" }, "require-dev": { - "orchestra/testbench": "^6.0", + "orchestra/testbench": "^6.0|^8.0", + "pestphp/pest": "^1.22", + "pestphp/pest-plugin-laravel": "^1.3", "phpunit/phpunit": "^9.0" }, "autoload": { @@ -46,9 +48,8 @@ } }, "scripts": { - "test": "vendor/bin/phpunit", - "test-coverage": "vendor/bin/phpunit --coverage-html coverage" - + "test": "vendor/bin/pest", + "test-coverage": "vendor/bin/pest --coverage-html coverage" }, "config": { "sort-packages": true diff --git a/composer.lock b/composer.lock index 655342b..be3cf19 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,30 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "35c11724161fcc925bc8243a1690ef1c", + "content-hash": "3d4583cf47507562d5a0a26237aea3d0", "packages": [ { "name": "brick/math", - "version": "0.9.2", + "version": "0.10.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0" + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", - "reference": "dff976c2f3487d42c1db75a3b180e2b9f0e72ce0", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", "shasum": "" }, "require": { "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.3.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "4.25.0" }, "type": "library", "autoload": { @@ -52,46 +52,117 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.2" + "source": "https://github.com/brick/math/tree/0.10.2" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/brick/math", - "type": "tidelift" + "url": "https://github.com/BenMorel", + "type": "github" } ], - "time": "2021-01-20T22:51:39+00:00" + "time": "2022-08-10T22:54:19+00:00" }, { - "name": "doctrine/inflector", - "version": "2.0.3", + "name": "dflydev/dot-access-data", + "version": "v3.0.1", "source": { "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210" + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/9cf661f4eb38f7c881cac67c75ea9b00bf97b210", - "reference": "9cf661f4eb38f7c881cac67c75ea9b00bf97b210", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", + "reference": "0992cc19268b259a39e86f296da5f0677841f42c", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^7.0", - "phpstan/phpstan": "^0.11", - "phpstan/phpstan-phpunit": "^0.11", - "phpstan/phpstan-strict-rules": "^0.11", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "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.1" + }, + "time": "2021-08-13T13:06:58+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", + "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" }, + "type": "library", "autoload": { "psr-4": { "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" @@ -139,7 +210,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.x" + "source": "https://github.com/doctrine/inflector/tree/2.0.5" }, "funding": [ { @@ -155,36 +226,32 @@ "type": "tidelift" } ], - "time": "2020-05-29T15:13:26+00:00" + "time": "2022-09-07T09:01:28+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229", + "reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^9.0", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.11" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" @@ -219,7 +286,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "source": "https://github.com/doctrine/lexer/tree/1.2.3" }, "funding": [ { @@ -235,33 +302,33 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-02-28T11:07:21+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.1.0", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "webmozart/assert": "^1.7.0" + "webmozart/assert": "^1.0" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-webmozart-assert": "^0.12.7", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", @@ -288,7 +355,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" }, "funding": [ { @@ -296,7 +363,7 @@ "type": "github" } ], - "time": "2020-11-24T19:55:57+00:00" + "time": "2022-09-10T18:51:20+00:00" }, { "name": "egulias/email-validator", @@ -368,31 +435,26 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.0.1", + "version": "v1.1.0", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb" + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/7e279d2cd5d7fbb156ce46daada972355cea27bb", - "reference": "7e279d2cd5d7fbb156ce46daada972355cea27bb", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", "shasum": "" }, "require": { - "php": "^7.0|^8.0", - "phpoption/phpoption": "^1.7.3" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" }, "require-dev": { - "phpunit/phpunit": "^6.5|^7.5|^8.5|^9.0" + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, "autoload": { "psr-4": { "GrahamCampbell\\ResultType\\": "src/" @@ -405,7 +467,8 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "description": "An Implementation Of The Result Type", @@ -418,7 +481,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" }, "funding": [ { @@ -430,38 +493,39 @@ "type": "tidelift" } ], - "time": "2020-04-13T13:17:36+00:00" + "time": "2022-07-30T15:56:11+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.3.0", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "7008573787b430c1c1f650e3722d9bba59967628" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", - "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7 || ^2.0", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0" + "psr/http-client": "^1.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" }, "provide": { "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", - "psr/log": "^1.1" + "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { "ext-curl": "Required for CURL handler support", @@ -470,36 +534,64 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.3-dev" + "dev-master": "7.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia" + }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, { "name": "Márk Sági-Kazár", "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" + "homepage": "https://github.com/sagikazarmark" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", "keywords": [ "client", "curl", @@ -513,7 +605,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -525,28 +617,24 @@ "type": "github" }, { - "url": "https://github.com/alexeyshockov", - "type": "github" - }, - { - "url": "https://github.com/gmponos", - "type": "github" + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", + "type": "tidelift" } ], - "time": "2021-03-23T11:33:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.4.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", - "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -558,26 +646,41 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.4-dev" + "dev-master": "1.5-dev" } }, "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - }, "files": [ "src/functions_include.php" - ] + ], + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", + "homepage": "https://github.com/Tobion" } ], "description": "Guzzle promises library", @@ -586,66 +689,110 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.4.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, - "time": "2021-03-07T09:25:29+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "1.8.2", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91" + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91", - "reference": "dc960a912984efb74d0a90222870c72c87f10c91", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", "shasum": "" }, "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.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-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "2.4-dev" } }, "autoload": { "psr-4": { "GuzzleHttp\\Psr7\\": "src/" - }, - "files": [ - "src/functions_include.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, { "name": "Michael Dowling", "email": "mtdowling@gmail.com", "homepage": "https://github.com/mtdowling" }, + { + "name": "George Mponos", + "email": "gmponos@gmail.com", + "homepage": "https://github.com/gmponos" + }, + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com", + "homepage": "https://github.com/Nyholm" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://github.com/sagikazarmark" + }, { "name": "Tobias Schultze", + "email": "webmaster@tubo-world.de", "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" } ], "description": "PSR-7 message implementation that also provides common utility methods", @@ -661,22 +808,36 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.8.2" + "source": "https://github.com/guzzle/psr7/tree/2.4.1" }, - "time": "2021-04-26T09:17:50+00:00" + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", + "type": "tidelift" + } + ], + "time": "2022-08-28T14:45:39+00:00" }, { "name": "laravel/framework", - "version": "v8.42.1", + "version": "v8.83.24", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "41ec4897a70eb8729cf0ff34a8354413c54e42a6" + "reference": "a684da6197ae77eee090637ae4411b2f321adfc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/41ec4897a70eb8729cf0ff34a8354413c54e42a6", - "reference": "41ec4897a70eb8729cf0ff34a8354413c54e42a6", + "url": "https://api.github.com/repos/laravel/framework/zipball/a684da6197ae77eee090637ae4411b2f321adfc7", + "reference": "a684da6197ae77eee090637ae4411b2f321adfc7", "shasum": "" }, "require": { @@ -686,34 +847,37 @@ "ext-json": "*", "ext-mbstring": "*", "ext-openssl": "*", - "league/commonmark": "^1.3", + "laravel/serializable-closure": "^1.0", + "league/commonmark": "^1.3|^2.0.2", "league/flysystem": "^1.1", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.31", + "nesbot/carbon": "^2.53.1", "opis/closure": "^3.6", "php": "^7.3|^8.0", "psr/container": "^1.0", + "psr/log": "^1.0|^2.0", "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.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", + "ramsey/uuid": "^4.2.2", + "swiftmailer/swiftmailer": "^6.3", + "symfony/console": "^5.4", + "symfony/error-handler": "^5.4", + "symfony/finder": "^5.4", + "symfony/http-foundation": "^5.4", + "symfony/http-kernel": "^5.4", + "symfony/mime": "^5.4", + "symfony/process": "^5.4", + "symfony/routing": "^5.4", + "symfony/var-dumper": "^5.4", "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^5.2", - "voku/portable-ascii": "^1.4.8" + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^1.6.1" }, "conflict": { "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0" + "psr/container-implementation": "1.0", + "psr/simple-cache-implementation": "1.0" }, "replace": { "illuminate/auth": "self.version", @@ -749,22 +913,24 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.155", - "doctrine/dbal": "^2.6|^3.0", - "filp/whoops": "^2.8", + "aws/aws-sdk-php": "^3.198.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "filp/whoops": "^2.14.3", "guzzlehttp/guzzle": "^6.5.5|^7.0.1", "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.2", - "orchestra/testbench-core": "^6.8", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^6.27", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.8|^9.3.3", - "predis/predis": "^1.1.1", - "symfony/cache": "^5.1.4" + "phpunit/phpunit": "^8.5.19|^9.5.8", + "predis/predis": "^1.1.9", + "symfony/cache": "^5.4" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.155).", + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.6|^3.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-bcmath": "Required to use the multiple_of validation rule.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -772,21 +938,21 @@ "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).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", "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).", + "mockery/mockery": "Required to use mocking (^1.4.4).", "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).", + "phpunit/phpunit": "Required to use assertions and run tests (^8.5.19|^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9).", "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).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^4.0|^5.0|^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.0)." }, @@ -831,46 +997,118 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-05-19T13:03:18+00:00" + "time": "2022-09-22T18:59:47+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", + "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2022-09-08T13:45:54+00:00" }, { "name": "league/commonmark", - "version": "1.6.2", + "version": "2.3.5", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb" + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7d70d2f19c84bcc16275ea47edabee24747352eb", - "reference": "7d70d2f19c84bcc16275ea47edabee24747352eb", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", + "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "scrutinizer/ocular": "1.7.*" + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "cebe/markdown": "~1.0", - "commonmark/commonmark.js": "0.29.2", - "erusev/parsedown": "~1.0", + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "~1.4", - "mikehaertl/php-shellcommand": "^1.4", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.2", - "scrutinizer/ocular": "^1.5", - "symfony/finder": "^4.2" + "michelf/php-markdown": "^1.4", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" }, - "bin": [ - "bin/commonmark" - ], "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, "autoload": { "psr-4": { "League\\CommonMark\\": "src" @@ -888,7 +1126,7 @@ "role": "Lead Developer" } ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and Github-Flavored Markdown (GFM)", + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", "homepage": "https://commonmark.thephpleague.com", "keywords": [ "commonmark", @@ -902,15 +1140,12 @@ ], "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" @@ -923,81 +1158,158 @@ "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-05-12T11:39:41+00:00" + "time": "2022-07-29T10:59:45+00:00" }, { - "name": "league/flysystem", - "version": "1.1.3", + "name": "league/config", + "version": "v1.1.1", "source": { "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a" + "url": "https://github.com/thephpleague/config.git", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/9be3b16c877d477357c015cec057548cf9b2a14a", - "reference": "9be3b16c877d477357c015cec057548cf9b2a14a", + "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" - }, - "conflict": { - "league/flysystem-sftp": "<1.0.6" + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" }, "require-dev": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "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", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "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" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-main": "1.2-dev" } }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Config\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Frank de Jonge", - "email": "info@frenky.net" + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "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-08-14T12:15:32+00:00" + }, + { + "name": "league/flysystem", + "version": "1.1.9", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", + "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "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", @@ -1019,7 +1331,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.x" + "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" }, "funding": [ { @@ -1027,20 +1339,20 @@ "type": "other" } ], - "time": "2020-08-23T07:39:11+00:00" + "time": "2021-12-09T09:40:50+00:00" }, { "name": "league/mime-type-detection", - "version": "1.7.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3" + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", - "reference": "3b9dff8aaf7323590c1d2e443db701eb1f9aa0d3", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", "shasum": "" }, "require": { @@ -1048,7 +1360,7 @@ "php": "^7.2 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.18", + "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", "phpunit/phpunit": "^8.5.8 || ^9.3" }, @@ -1071,7 +1383,7 @@ "description": "Mime-type detection for Flysystem", "support": { "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.7.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" }, "funding": [ { @@ -1083,56 +1395,62 @@ "type": "tidelift" } ], - "time": "2021-01-18T20:58:21+00:00" + "time": "2022-04-17T13:12:02+00:00" }, { "name": "monolog/monolog", - "version": "2.2.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084" + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/1cb1cde8e8dd0f70cc0fe51354a59acad9302084", - "reference": "1cb1cde8e8dd0f70cc0fe51354a59acad9302084", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", + "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", "shasum": "" }, "require": { "php": ">=7.2", - "psr/log": "^1.0.1" + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", "graylog2/gelf-php": "^1.4.2", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.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.59", - "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" + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", "doctrine/couchdb": "Allow sending log messages to a CouchDB server", "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", "ext-mbstring": "Allow to work properly with unicode symbols", "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "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" }, @@ -1167,7 +1485,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.2.0" + "source": "https://github.com/Seldaek/monolog/tree/2.8.0" }, "funding": [ { @@ -1179,36 +1497,40 @@ "type": "tidelift" } ], - "time": "2020-12-14T13:15:25+00:00" + "time": "2022-07-24T11:55:47+00:00" }, { "name": "nesbot/carbon", - "version": "2.48.0", + "version": "2.62.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "d3c447f21072766cddec3522f9468a5849a76147" + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d3c447f21072766cddec3522f9468a5849a76147", - "reference": "d3c447f21072766cddec3522f9468a5849a76147", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", "shasum": "" }, "require": { "ext-json": "*", "php": "^7.1.8 || ^8.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^3.4 || ^4.0 || ^5.0" + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, "require-dev": { + "doctrine/dbal": "^2.0 || ^3.0", "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^2.14 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.54", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", "squizlabs/php_codesniffer": "^3.4" }, "bin": [ @@ -1217,8 +1539,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.x-dev", - "dev-3.x": "3.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" }, "laravel": { "providers": [ @@ -1244,48 +1566,200 @@ { "name": "Brian Nesbitt", "email": "brian@nesbot.com", - "homepage": "http://nesbot.com" + "homepage": "https://markido.com" }, { "name": "kylekatarnls", - "homepage": "http://github.com/kylekatarnls" + "homepage": "https://github.com/kylekatarnls" } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "http://carbon.nesbot.com", + "homepage": "https://carbon.nesbot.com", "keywords": [ "date", "datetime", "time" ], "support": { + "docs": "https://carbon.nesbot.com/docs", "issues": "https://github.com/briannesbitt/Carbon/issues", "source": "https://github.com/briannesbitt/Carbon" }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", "type": "tidelift" } ], - "time": "2021-05-07T10:08:30+00:00" + "time": "2022-09-02T07:48:13+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.2", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", + "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.2" + }, + "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.2" + }, + "time": "2021-10-15T11:40:02+00:00" + }, + { + "name": "nette/utils", + "version": "v3.2.8", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", + "shasum": "" + }, + "require": { + "php": ">=7.2 <8.3" + }, + "conflict": { + "nette/di": "<3.0.6" + }, + "require-dev": { + "nette/tester": "~2.0", + "phpstan/phpstan": "^1.0", + "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.8" + }, + "time": "2022-09-12T23:36:20+00:00" }, { "name": "opis/closure", - "version": "3.6.2", + "version": "3.6.3", "source": { "type": "git", "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad", + "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad", "shasum": "" }, "require": { @@ -1302,12 +1776,12 @@ } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ "functions.php" - ] + ], + "psr-4": { + "Opis\\Closure\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1335,35 +1809,39 @@ ], "support": { "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "source": "https://github.com/opis/closure/tree/3.6.3" }, - "time": "2021-04-09T13:42:10+00:00" + "time": "2022-01-27T09:35:39+00:00" }, { "name": "phpoption/phpoption", - "version": "1.7.5", + "version": "1.9.0", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525" + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/994ecccd8f3283ecf5ac33254543eb0ac946d525", - "reference": "994ecccd8f3283ecf5ac33254543eb0ac946d525", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", "shasum": "" }, "require": { - "php": "^5.5.9 || ^7.0 || ^8.0" + "php": "^7.2.5 || ^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" + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "1.7-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -1378,11 +1856,13 @@ "authors": [ { "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com" + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" }, { "name": "Graham Campbell", - "email": "graham@alt-three.com" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" } ], "description": "Option Type for PHP", @@ -1394,7 +1874,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.7.5" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" }, "funding": [ { @@ -1406,24 +1886,24 @@ "type": "tidelift" } ], - "time": "2020-07-20T17:29:33+00:00" + "time": "2022-07-30T15:51:26+00:00" }, { "name": "psr/container", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf" + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/8622567409010282b7aeebe4bb841fe98b58dcaf", - "reference": "8622567409010282b7aeebe4bb841fe98b58dcaf", + "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", + "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", "shasum": "" }, "require": { - "php": ">=7.2.0" + "php": ">=7.4.0" }, "type": "library", "autoload": { @@ -1452,9 +1932,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.1" + "source": "https://github.com/php-fig/container/tree/1.1.2" }, - "time": "2021-03-05T17:36:06+00:00" + "time": "2021-11-05T16:50:12+00:00" }, { "name": "psr/event-dispatcher", @@ -1558,6 +2038,61 @@ }, "time": "2020-06-29T06:28:15+00:00" }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, { "name": "psr/http-message", "version": "1.0.1", @@ -1613,30 +2148,30 @@ }, { "name": "psr/log", - "version": "1.1.4", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", + "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", + "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { "psr-4": { - "Psr\\Log\\": "Psr/Log/" + "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1657,9 +2192,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" + "source": "https://github.com/php-fig/log/tree/2.0.0" }, - "time": "2021-05-03T11:20:27+00:00" + "time": "2021-07-14T16:41:46+00:00" }, { "name": "psr/simple-cache", @@ -1758,20 +2293,21 @@ }, { "name": "ramsey/collection", - "version": "1.1.3", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1" + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", - "reference": "28a5c4ab2f5111db6a60b2b4ec84057e0f43b9c1", + "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", "shasum": "" }, "require": { - "php": "^7.2 || ^8" + "php": "^7.3 || ^8", + "symfony/polyfill-php81": "^1.23" }, "require-dev": { "captainhook/captainhook": "^5.3", @@ -1781,6 +2317,7 @@ "hamcrest/hamcrest-php": "^2", "jangregor/phpstan-prophecy": "^0.8", "mockery/mockery": "^1.3", + "phpspec/prophecy-phpunit": "^2.0", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^0.12.32", "phpstan/phpstan-mockery": "^0.12.5", @@ -1808,7 +2345,7 @@ "homepage": "https://benramsey.com" } ], - "description": "A PHP 7.2+ library for representing and manipulating collections.", + "description": "A PHP library for representing and manipulating collections.", "keywords": [ "array", "collection", @@ -1819,7 +2356,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.1.3" + "source": "https://github.com/ramsey/collection/tree/1.2.2" }, "funding": [ { @@ -1831,53 +2368,53 @@ "type": "tidelift" } ], - "time": "2021-01-21T17:40:04+00:00" + "time": "2021-10-10T03:01:02+00:00" }, { "name": "ramsey/uuid", - "version": "4.1.1", + "version": "4.5.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "cd4032040a750077205918c86049aa0f43d22947" + "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/cd4032040a750077205918c86049aa0f43d22947", - "reference": "cd4032040a750077205918c86049aa0f43d22947", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d", + "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "ext-ctype": "*", "ext-json": "*", - "php": "^7.2 || ^8", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8" + "php": "^8.0", + "ramsey/collection": "^1.0" }, "replace": { "rhumsaa/uuid": "self.version" }, "require-dev": { - "codeception/aspect-mock": "^3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7.0", + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", "doctrine/annotations": "^1.8", - "goaop/framework": "^2", + "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", "php-mock/php-mock-mockery": "^1.3", - "php-mock/php-mock-phpunit": "^2.5", "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^0.17.1", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^8.5", - "psy/psysh": "^0.10.0", - "slevomat/coding-standard": "^6.0", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "3.9.4" + "vimeo/psalm": "^4.9" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -1889,24 +2426,23 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "4.x-dev" + "captainhook": { + "force-install": true } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "homepage": "https://github.com/ramsey/uuid", "keywords": [ "guid", "identifier", @@ -1914,29 +2450,32 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "rss": "https://github.com/ramsey/uuid/releases.atom", - "source": "https://github.com/ramsey/uuid" + "source": "https://github.com/ramsey/uuid/tree/4.5.1" }, "funding": [ { "url": "https://github.com/ramsey", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" } ], - "time": "2020-08-18T17:17:46+00:00" + "time": "2022-09-16T03:22:46+00:00" }, { "name": "swiftmailer/swiftmailer", - "version": "v6.2.7", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933" + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/15f7faf8508e04471f666633addacf54c0ab5933", - "reference": "15f7faf8508e04471f666633addacf54c0ab5933", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", + "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", "shasum": "" }, "require": { @@ -1948,7 +2487,7 @@ }, "require-dev": { "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.0" + "symfony/phpunit-bridge": "^4.4|^5.4" }, "suggest": { "ext-intl": "Needed to support internationalized email addresses" @@ -1986,7 +2525,7 @@ ], "support": { "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.2.7" + "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" }, "funding": [ { @@ -1998,31 +2537,34 @@ "type": "tidelift" } ], - "time": "2021-03-09T12:30:35+00:00" + "abandoned": "symfony/mailer", + "time": "2021-10-18T15:26:12+00:00" }, { "name": "symfony/console", - "version": "v5.2.8", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "864568fdc0208b3eba3638b6000b69d2386e6768" + "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/864568fdc0208b3eba3638b6000b69d2386e6768", - "reference": "864568fdc0208b3eba3638b6000b69d2386e6768", + "url": "https://api.github.com/repos/symfony/console/zipball/c072aa8f724c3af64e2c7a96b796a4863d24dba1", + "reference": "c072aa8f724c3af64e2c7a96b796a4863d24dba1", "shasum": "" }, "require": { "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.8", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1|^2", - "symfony/string": "^5.1" + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" }, "conflict": { + "psr/log": ">=3", "symfony/dependency-injection": "<4.4", "symfony/dotenv": "<5.1", "symfony/event-dispatcher": "<4.4", @@ -2030,16 +2572,16 @@ "symfony/process": "<4.4" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/event-dispatcher": "^4.4|^5.0", - "symfony/lock": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/var-dumper": "^4.4|^5.0" + "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", @@ -2079,7 +2621,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.8" + "source": "https://github.com/symfony/console/tree/v5.4.12" }, "funding": [ { @@ -2095,24 +2637,24 @@ "type": "tidelift" } ], - "time": "2021-05-11T15:45:21+00:00" + "time": "2022-08-17T13:18:05+00:00" }, { "name": "symfony/css-selector", - "version": "v5.2.9", + "version": "v6.0.11", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "5d5f97809015102116208b976eb2edb44b689560" + "reference": "ab2746acddc4f03a7234c8441822ac5d5c63efe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/5d5f97809015102116208b976eb2edb44b689560", - "reference": "5d5f97809015102116208b976eb2edb44b689560", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/ab2746acddc4f03a7234c8441822ac5d5c63efe9", + "reference": "ab2746acddc4f03a7234c8441822ac5d5c63efe9", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "type": "library", "autoload": { @@ -2144,7 +2686,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v5.2.9" + "source": "https://github.com/symfony/css-selector/tree/v6.0.11" }, "funding": [ { @@ -2160,29 +2702,29 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-06-27T17:10:44+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v2.4.0", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627" + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5f38c8804a9e97d23e0c8d63341088cd8a22d627", - "reference": "5f38c8804a9e97d23e0c8d63341088cd8a22d627", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", + "reference": "26954b3d62a6c5fd0ea8a2a00c0353a14978d05c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.0.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -2211,7 +2753,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.0.2" }, "funding": [ { @@ -2227,33 +2769,35 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/error-handler", - "version": "v5.2.8", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1416bc16317a8188aabde251afef7618bf4687ac" + "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1416bc16317a8188aabde251afef7618bf4687ac", - "reference": "1416bc16317a8188aabde251afef7618bf4687ac", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/f75d17cb4769eb38cd5fccbda95cd80a054d35c8", + "reference": "f75d17cb4769eb38cd5fccbda95cd80a054d35c8", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "^1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/var-dumper": "^4.4|^5.0" + "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", - "symfony/serializer": "^4.4|^5.0" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^4.4|^5.0|^6.0", + "symfony/serializer": "^4.4|^5.0|^6.0" }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], "type": "library", "autoload": { "psr-4": { @@ -2280,7 +2824,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.2.8" + "source": "https://github.com/symfony/error-handler/tree/v5.4.11" }, "funding": [ { @@ -2296,44 +2840,42 @@ "type": "tidelift" } ], - "time": "2021-05-07T13:42:21+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v5.2.4", + "version": "v6.0.9", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d08d6ec121a425897951900ab692b612a61d6240" + "reference": "5c85b58422865d42c6eb46f7693339056db098a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d08d6ec121a425897951900ab692b612a61d6240", - "reference": "d08d6ec121a425897951900ab692b612a61d6240", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5c85b58422865d42c6eb46f7693339056db098a8", + "reference": "5c85b58422865d42c6eb46f7693339056db098a8", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/event-dispatcher-contracts": "^2", - "symfony/polyfill-php80": "^1.15" + "php": ">=8.0.2", + "symfony/event-dispatcher-contracts": "^2|^3" }, "conflict": { - "symfony/dependency-injection": "<4.4" + "symfony/dependency-injection": "<5.4" }, "provide": { "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" + "symfony/event-dispatcher-implementation": "2.0|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/error-handler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/service-contracts": "^1.1|^2", - "symfony/stopwatch": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" }, "suggest": { "symfony/dependency-injection": "", @@ -2365,7 +2907,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.2.4" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.0.9" }, "funding": [ { @@ -2381,24 +2923,24 @@ "type": "tidelift" } ], - "time": "2021-02-18T17:12:37+00:00" + "time": "2022-05-05T16:45:52+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v2.4.0", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11" + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/69fee1ad2332a7cbab3aca13591953da9cdb7a11", - "reference": "69fee1ad2332a7cbab3aca13591953da9cdb7a11", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7bc61cc2db649b4637d331240c5346dcc7708051", + "reference": "7bc61cc2db649b4637d331240c5346dcc7708051", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "psr/event-dispatcher": "^1" }, "suggest": { @@ -2407,7 +2949,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -2444,7 +2986,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.2" }, "funding": [ { @@ -2460,24 +3002,26 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-01-02T09:55:41+00:00" }, { "name": "symfony/finder", - "version": "v5.2.9", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d" + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ccccb9d48ca42757dd12f2ca4bf857a4e217d90d", - "reference": "ccccb9d48ca42757dd12f2ca4bf857a4e217d90d", + "url": "https://api.github.com/repos/symfony/finder/zipball/7872a66f57caffa2916a584db1aa7f12adc76f8c", + "reference": "7872a66f57caffa2916a584db1aa7f12adc76f8c", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -2505,7 +3049,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.2.9" + "source": "https://github.com/symfony/finder/tree/v5.4.11" }, "funding": [ { @@ -2521,111 +3065,36 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-07-29T07:37:50+00:00" }, { - "name": "symfony/http-client-contracts", - "version": "v2.4.0", + "name": "symfony/http-foundation", + "version": "v5.4.12", "source": { "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4" + "url": "https://github.com/symfony/http-foundation.git", + "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/7e82f6084d7cae521a75ef2cb5c9457bbda785f4", - "reference": "7e82f6084d7cae521a75ef2cb5c9457bbda785f4", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4bfe9611b113b15d98a43da68ec9b5a00d56791", + "reference": "f4bfe9611b113b15d98a43da68ec9b5a00d56791", "shasum": "" }, "require": { - "php": ">=7.2.5" - }, - "suggest": { - "symfony/http-client-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-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/v2.4.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2021-04-11T23:07:08+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v5.2.8", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e8fbbab7c4a71592985019477532629cb2e142dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8fbbab7c4a71592985019477532629cb2e142dc", - "reference": "e8fbbab7c4a71592985019477532629cb2e142dc", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.15" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/mime": "^4.4|^5.0" + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^4.4|^5.0|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -2656,7 +3125,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.2.8" + "source": "https://github.com/symfony/http-foundation/tree/v5.4.12" }, "funding": [ { @@ -2672,40 +3141,39 @@ "type": "tidelift" } ], - "time": "2021-05-07T13:41:16+00:00" + "time": "2022-08-19T07:33:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.2.9", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb" + "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/eb540ef6870dbf33c92e372cfb869ebf9649e6cb", - "reference": "eb540ef6870dbf33c92e372cfb869ebf9649e6cb", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/37f660fa3bcd78fe4893ce23ebe934618ec099be", + "reference": "37f660fa3bcd78fe4893ce23ebe934618ec099be", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/log": "~1.0", - "symfony/deprecation-contracts": "^2.1", - "symfony/error-handler": "^4.4|^5.0", - "symfony/event-dispatcher": "^5.0", - "symfony/http-client-contracts": "^1.1|^2", - "symfony/http-foundation": "^4.4|^5.0", + "psr/log": "^1|^2", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^5.0|^6.0", + "symfony/http-foundation": "^5.3.7|^6.0", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/browser-kit": "<4.4", + "symfony/browser-kit": "<5.4", "symfony/cache": "<5.0", "symfony/config": "<5.0", "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.1.8", + "symfony/dependency-injection": "<5.3", "symfony/doctrine-bridge": "<5.0", "symfony/form": "<5.0", "symfony/http-client": "<5.0", @@ -2717,23 +3185,24 @@ "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0" + "psr/log-implementation": "1.0|2.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^4.4|^5.0", - "symfony/config": "^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/css-selector": "^4.4|^5.0", - "symfony/dependency-injection": "^5.1.8", - "symfony/dom-crawler": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", - "symfony/routing": "^4.4|^5.0", - "symfony/stopwatch": "^4.4|^5.0", - "symfony/translation": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^5.0|^6.0", + "symfony/console": "^4.4|^5.0|^6.0", + "symfony/css-selector": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^5.3|^6.0", + "symfony/dom-crawler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/finder": "^4.4|^5.0|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/routing": "^4.4|^5.0|^6.0", + "symfony/stopwatch": "^4.4|^5.0|^6.0", + "symfony/translation": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^2.13|^3.0.4" }, "suggest": { @@ -2768,7 +3237,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.2.9" + "source": "https://github.com/symfony/http-kernel/tree/v5.4.12" }, "funding": [ { @@ -2784,28 +3253,28 @@ "type": "tidelift" } ], - "time": "2021-05-19T12:23:45+00:00" + "time": "2022-08-26T14:40:40+00:00" }, { "name": "symfony/mime", - "version": "v5.2.9", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "64258e870f8cc75c3dae986201ea2df58c210b52" + "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/64258e870f8cc75c3dae986201ea2df58c210b52", - "reference": "64258e870f8cc75c3dae986201ea2df58c210b52", + "url": "https://api.github.com/repos/symfony/mime/zipball/03876e9c5a36f5b45e7d9a381edda5421eff8a90", + "reference": "03876e9c5a36f5b45e7d9a381edda5421eff8a90", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "egulias/email-validator": "~3.0.0", @@ -2816,10 +3285,10 @@ "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", - "symfony/property-access": "^4.4|^5.1", - "symfony/property-info": "^4.4|^5.1", - "symfony/serializer": "^5.2" + "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": { @@ -2851,7 +3320,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.2.9" + "source": "https://github.com/symfony/mime/tree/v5.4.12" }, "funding": [ { @@ -2867,32 +3336,35 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-08-19T14:24:03+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", - "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2900,12 +3372,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2930,7 +3402,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" }, "funding": [ { @@ -2946,32 +3418,35 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "06fb361659649bcfd6a208a0f1fcaf4e827ad342" + "reference": "143f1881e655bebca1312722af8068de235ae5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/06fb361659649bcfd6a208a0f1fcaf4e827ad342", - "reference": "06fb361659649bcfd6a208a0f1fcaf4e827ad342", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/143f1881e655bebca1312722af8068de235ae5dc", + "reference": "143f1881e655bebca1312722af8068de235ae5dc", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-iconv": "*" + }, "suggest": { "ext-iconv": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2979,12 +3454,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3010,7 +3485,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.26.0" }, "funding": [ { @@ -3026,20 +3501,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170" + "reference": "433d05519ce6990bf3530fba6957499d327395c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170", - "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", + "reference": "433d05519ce6990bf3530fba6957499d327395c2", "shasum": "" }, "require": { @@ -3051,7 +3526,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3059,12 +3534,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3091,7 +3566,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" }, "funding": [ { @@ -3107,20 +3582,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "2d63434d922daf7da8dd863e7907e67ee3031483" + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483", - "reference": "2d63434d922daf7da8dd863e7907e67ee3031483", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", "shasum": "" }, "require": { @@ -3134,7 +3609,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3142,12 +3617,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3178,7 +3653,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" }, "funding": [ { @@ -3194,20 +3669,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248" + "reference": "219aa369ceff116e673852dce47c3a41794c14bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248", - "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", + "reference": "219aa369ceff116e673852dce47c3a41794c14bd", "shasum": "" }, "require": { @@ -3219,7 +3694,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3227,12 +3702,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3262,7 +3737,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" }, "funding": [ { @@ -3278,32 +3753,35 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1" + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1", - "reference": "5232de97ee3b75b0360528dae24e73db49566ab1", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, "suggest": { "ext-mbstring": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3311,12 +3789,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3342,7 +3820,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" }, "funding": [ { @@ -3358,20 +3836,20 @@ "type": "tidelift" } ], - "time": "2021-01-22T09:19:47+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", - "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", + "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", "shasum": "" }, "require": { @@ -3380,7 +3858,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3388,12 +3866,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3418,7 +3896,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" }, "funding": [ { @@ -3434,20 +3912,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", - "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/e440d35fa0286f77fb45b79a03fedbeda9307e85", + "reference": "e440d35fa0286f77fb45b79a03fedbeda9307e85", "shasum": "" }, "require": { @@ -3456,7 +3934,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3464,12 +3942,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php73\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3497,7 +3975,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.26.0" }, "funding": [ { @@ -3513,20 +3991,20 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.22.1", + "version": "v1.26.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", - "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", "shasum": "" }, "require": { @@ -3535,7 +4013,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.22-dev" + "dev-main": "1.26-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3543,12 +4021,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3580,7 +4058,86 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-05-10T07:21:04+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.26.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.26-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" }, "funding": [ { @@ -3596,25 +4153,25 @@ "type": "tidelift" } ], - "time": "2021-01-07T16:49:33+00:00" + "time": "2022-05-24T11:49:31+00:00" }, { "name": "symfony/process", - "version": "v5.2.7", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e" + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e", - "reference": "98cb8eeb72e55d4196dd1e36f1f16e7b3a9a088e", + "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1", + "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "type": "library", "autoload": { @@ -3642,7 +4199,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.3.0-BETA1" + "source": "https://github.com/symfony/process/tree/v5.4.11" }, "funding": [ { @@ -3658,40 +4215,41 @@ "type": "tidelift" } ], - "time": "2021-04-08T10:27:02+00:00" + "time": "2022-06-27T16:58:25+00:00" }, { "name": "symfony/routing", - "version": "v5.2.9", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "4a7b2bf5e1221be1902b6853743a9bb317f6925e" + "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/4a7b2bf5e1221be1902b6853743a9bb317f6925e", - "reference": "4a7b2bf5e1221be1902b6853743a9bb317f6925e", + "url": "https://api.github.com/repos/symfony/routing/zipball/3e01ccd9b2a3a4167ba2b3c53612762300300226", + "reference": "3e01ccd9b2a3a4167ba2b3c53612762300300226", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-php80": "^1.15" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "symfony/config": "<5.0", + "doctrine/annotations": "<1.12", + "symfony/config": "<5.3", "symfony/dependency-injection": "<4.4", "symfony/yaml": "<4.4" }, "require-dev": { - "doctrine/annotations": "^1.10.4", - "psr/log": "~1.0", - "symfony/config": "^5.0", - "symfony/dependency-injection": "^4.4|^5.0", - "symfony/expression-language": "^4.4|^5.0", - "symfony/http-foundation": "^4.4|^5.0", - "symfony/yaml": "^4.4|^5.0" + "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", @@ -3731,7 +4289,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.2.9" + "source": "https://github.com/symfony/routing/tree/v5.4.11" }, "funding": [ { @@ -3747,25 +4305,29 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.0", + "version": "v2.5.2", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb" + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", - "reference": "f040a30e04b57fbcc9c6cbcf4dbaa96bd318b9bb", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { "php": ">=7.2.5", - "psr/container": "^1.1" + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" }, "suggest": { "symfony/service-implementation": "" @@ -3773,7 +4335,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "2.5-dev" }, "thanks": { "name": "symfony/contracts", @@ -3810,7 +4372,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, "funding": [ { @@ -3826,44 +4388,46 @@ "type": "tidelift" } ], - "time": "2021-04-01T10:43:52+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { "name": "symfony/string", - "version": "v5.2.8", + "version": "v6.0.12", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db" + "reference": "3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", - "reference": "01b35eb64cac8467c3f94cd0ce2d0d376bb7d1db", + "url": "https://api.github.com/repos/symfony/string/zipball/3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0", + "reference": "3a975ba1a1508ad97df45f4590f55b7cc4c1a0a0", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "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" + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" }, "require-dev": { - "symfony/error-handler": "^4.4|^5.0", - "symfony/http-client": "^4.4|^5.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0" + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -3893,7 +4457,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.8" + "source": "https://github.com/symfony/string/tree/v6.0.12" }, "funding": [ { @@ -3909,48 +4473,50 @@ "type": "tidelift" } ], - "time": "2021-05-10T14:56:10+00:00" + "time": "2022-08-12T18:05:20+00:00" }, { "name": "symfony/translation", - "version": "v5.2.9", + "version": "v6.0.12", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "61af68dba333e2d376a325a29c2a3f2a605b4876" + "reference": "5e71973b4991e141271465dacf4bf9e719941424" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/61af68dba333e2d376a325a29c2a3f2a605b4876", - "reference": "61af68dba333e2d376a325a29c2a3f2a605b4876", + "url": "https://api.github.com/repos/symfony/translation/zipball/5e71973b4991e141271465dacf4bf9e719941424", + "reference": "5e71973b4991e141271465dacf4bf9e719941424", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.0.2", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15", - "symfony/translation-contracts": "^2.3" + "symfony/translation-contracts": "^2.3|^3.0" }, "conflict": { - "symfony/config": "<4.4", - "symfony/dependency-injection": "<5.0", - "symfony/http-kernel": "<5.0", - "symfony/twig-bundle": "<5.0", - "symfony/yaml": "<4.4" + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" }, "provide": { - "symfony/translation-implementation": "2.3" + "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "psr/log": "~1.0", - "symfony/config": "^4.4|^5.0", - "symfony/console": "^4.4|^5.0", - "symfony/dependency-injection": "^5.0", - "symfony/finder": "^4.4|^5.0", - "symfony/http-kernel": "^5.0", - "symfony/intl": "^4.4|^5.0", - "symfony/service-contracts": "^1.1.2|^2", - "symfony/yaml": "^4.4|^5.0" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" }, "suggest": { "psr/log-implementation": "To use logging capability in translator", @@ -3986,7 +4552,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.2.9" + "source": "https://github.com/symfony/translation/tree/v6.0.12" }, "funding": [ { @@ -4002,24 +4568,24 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-08-02T16:01:06+00:00" }, { "name": "symfony/translation-contracts", - "version": "v2.4.0", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95" + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/95c812666f3e91db75385749fe219c5e494c7f95", - "reference": "95c812666f3e91db75385749fe219c5e494c7f95", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/acbfbb274e730e5a0236f619b6168d9dedb3e282", + "reference": "acbfbb274e730e5a0236f619b6168d9dedb3e282", "shasum": "" }, "require": { - "php": ">=7.2.5" + "php": ">=8.0.2" }, "suggest": { "symfony/translation-implementation": "" @@ -4027,7 +4593,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.0-dev" }, "thanks": { "name": "symfony/contracts", @@ -4064,7 +4630,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v2.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.0.2" }, "funding": [ { @@ -4080,26 +4646,26 @@ "type": "tidelift" } ], - "time": "2021-03-23T23:28:01+00:00" + "time": "2022-06-27T17:10:44+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.2.8", + "version": "v5.4.11", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba" + "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d693200a73fae179d27f8f1b16b4faf3e8569eba", - "reference": "d693200a73fae179d27f8f1b16b4faf3e8569eba", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b8f306d7b8ef34fb3db3305be97ba8e088fb4861", + "reference": "b8f306d7b8ef34fb3db3305be97ba8e088fb4861", "shasum": "" }, "require": { "php": ">=7.2.5", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.15" + "symfony/polyfill-php80": "^1.16" }, "conflict": { "phpunit/phpunit": "<5.4.3", @@ -4107,8 +4673,9 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0", - "symfony/process": "^4.4|^5.0", + "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": { @@ -4152,7 +4719,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.8" + "source": "https://github.com/symfony/var-dumper/tree/v5.4.11" }, "funding": [ { @@ -4168,30 +4735,30 @@ "type": "tidelift" } ], - "time": "2021-05-07T13:42:21+00:00" + "time": "2022-07-20T13:00:38+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.3", + "version": "2.2.5", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5" + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/b43b05cf43c1b6d849478965062b6ef73e223bb5", - "reference": "b43b05cf43c1b6d849478965062b6ef73e223bb5", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19", + "reference": "4348a3a06651827a27d989ad1d13efec6bb49b19", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.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" + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" }, "type": "library", "extra": { @@ -4219,37 +4786,37 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.3" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5" }, - "time": "2020-07-13T06:12:54+00:00" + "time": "2022-09-12T13:28:28+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.3.0", + "version": "v5.4.1", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56" + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", - "reference": "b3eac5c7ac896e52deab4a99068e3f4ab12d9e56", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", + "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.1", + "graham-campbell/result-type": "^1.0.2", "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" + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.14 || ^9.5.1" + "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -4257,7 +4824,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.3-dev" + "dev-master": "5.4-dev" } }, "autoload": { @@ -4272,13 +4839,13 @@ "authors": [ { "name": "Graham Campbell", - "email": "graham@alt-three.com", - "homepage": "https://gjcampbell.co.uk/" + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" }, { "name": "Vance Lucas", "email": "vance@vancelucas.com", - "homepage": "https://vancelucas.com/" + "homepage": "https://github.com/vlucas" } ], "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", @@ -4289,7 +4856,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.3.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" }, "funding": [ { @@ -4301,20 +4868,20 @@ "type": "tidelift" } ], - "time": "2021-01-20T15:23:13+00:00" + "time": "2021-12-12T23:22:04+00:00" }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/87337c91b9dfacee02452244ee14ab3c43bc485a", + "reference": "87337c91b9dfacee02452244ee14ab3c43bc485a", "shasum": "" }, "require": { @@ -4351,7 +4918,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/1.6.1" }, "funding": [ { @@ -4375,25 +4942,25 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-01-24T18:55:24+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -4431,37 +4998,38 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc", + "reference": "10dcfce151b967d20fde1b34ae6640712c3891bc", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.22" }, "type": "library", "autoload": { @@ -4488,7 +5056,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.4.1" }, "funding": [ { @@ -4504,45 +5072,100 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-03-03T08:28:38+00:00" }, { - "name": "fakerphp/faker", - "version": "v1.14.1", + "name": "facade/ignition-contracts", + "version": "1.0.2", "source": { "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1" + "url": "https://github.com/facade/ignition-contracts.git", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1", - "reference": "ed22aee8d17c7b396f74a58b1e7fefa4f90d5ef1", + "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", + "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0", - "psr/container": "^1.0", - "symfony/deprecation-contracts": "^2.2" - }, - "conflict": { - "fzaninotto/faker": "*" + "php": "^7.3|^8.0" }, "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." + "friendsofphp/php-cs-fixer": "^v2.15.8", + "phpunit/phpunit": "^9.3.11", + "vimeo/psalm": "^3.17.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.15-dev" + "autoload": { + "psr-4": { + "Facade\\IgnitionContracts\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://flareapp.io", + "role": "Developer" + } + ], + "description": "Solution contracts for Ignition", + "homepage": "https://github.com/facade/ignition-contracts", + "keywords": [ + "contracts", + "flare", + "ignition" + ], + "support": { + "issues": "https://github.com/facade/ignition-contracts/issues", + "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" + }, + "time": "2020-10-16T08:27:54+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.20.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/37f751c67a5372d4e26353bd9384bc03744ec77b", + "reference": "37f751c67a5372d4e26353bd9384bc03744ec77b", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "symfony/phpunit-bridge": "^4.4 || ^5.2" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.20-dev" } }, "autoload": { @@ -4567,9 +5190,80 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v.1.14.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.20.0" }, - "time": "2021-03-30T06:27:33+00:00" + "time": "2022-07-20T13:12:54+00:00" + }, + { + "name": "filp/whoops", + "version": "2.14.5", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "shasum": "" + }, + "require": { + "php": "^5.5.9 || ^7.0 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^0.9 || ^1.0", + "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0" + }, + "suggest": { + "symfony/var-dumper": "Pretty print complex values better with var-dumper available", + "whoops/soap": "Formats errors as SOAP responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.7-dev" + } + }, + "autoload": { + "psr-4": { + "Whoops\\": "src/Whoops/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Filipe Dobreira", + "homepage": "https://github.com/filp", + "role": "Developer" + } + ], + "description": "php error handling for cool kids", + "homepage": "https://filp.github.io/whoops/", + "keywords": [ + "error", + "exception", + "handling", + "library", + "throwable", + "whoops" + ], + "support": { + "issues": "https://github.com/filp/whoops/issues", + "source": "https://github.com/filp/whoops/tree/2.14.5" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2022-01-07T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -4624,16 +5318,16 @@ }, { "name": "mockery/mockery", - "version": "1.4.3", + "version": "1.5.1", "source": { "type": "git", "url": "https://github.com/mockery/mockery.git", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea" + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/d1339f64479af1bee0e82a0413813fe5345a54ea", - "reference": "d1339f64479af1bee0e82a0413813fe5345a54ea", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", "shasum": "" }, "require": { @@ -4690,43 +5384,44 @@ ], "support": { "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.4.3" + "source": "https://github.com/mockery/mockery/tree/1.5.1" }, - "time": "2021-02-24T09:51:49+00:00" + "time": "2022-09-07T15:32:08+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4742,7 +5437,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" }, "funding": [ { @@ -4750,20 +5445,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2022-03-03T13:19:32+00:00" }, { "name": "nikic/php-parser", - "version": "v4.10.5", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4432ba399e47c66624bc73c8c0f811e5c109576f", - "reference": "4432ba399e47c66624bc73c8c0f811e5c109576f", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -4804,31 +5499,118 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.5" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2021-05-03T19:11:20+00:00" + "time": "2022-09-04T07:30:47+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v5.11.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461", + "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461", + "shasum": "" + }, + "require": { + "facade/ignition-contracts": "^1.0", + "filp/whoops": "^2.14.3", + "php": "^7.3 || ^8.0", + "symfony/console": "^5.0" + }, + "require-dev": { + "brianium/paratest": "^6.1", + "fideloper/proxy": "^4.4.1", + "fruitcake/laravel-cors": "^2.0.3", + "laravel/framework": "8.x-dev", + "nunomaduro/larastan": "^0.6.2", + "nunomaduro/mock-final-classes": "^1.0", + "orchestra/testbench": "^6.0", + "phpstan/phpstan": "^0.12.64", + "phpunit/phpunit": "^9.5.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "NunoMaduro\\Collision\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Cli error handling for console/command-line PHP applications.", + "keywords": [ + "artisan", + "cli", + "command-line", + "console", + "error", + "handling", + "laravel", + "laravel-zero", + "php", + "symfony" + ], + "support": { + "issues": "https://github.com/nunomaduro/collision/issues", + "source": "https://github.com/nunomaduro/collision" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-01-10T16:22:52+00:00" }, { "name": "orchestra/testbench", - "version": "v6.17.1", + "version": "v6.25.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "d6df638c569899443a1e4dc14a33490837201784" + "reference": "a65b90b78caed1fdface168ca02af34f3422e513" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/d6df638c569899443a1e4dc14a33490837201784", - "reference": "d6df638c569899443a1e4dc14a33490837201784", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/a65b90b78caed1fdface168ca02af34f3422e513", + "reference": "a65b90b78caed1fdface168ca02af34f3422e513", "shasum": "" }, "require": { - "laravel/framework": "^8.25", - "mockery/mockery": "^1.4.2", - "orchestra/testbench-core": "^6.21.3", + "laravel/framework": "^8.75", + "mockery/mockery": "^1.4.4", + "orchestra/testbench-core": "^6.29", "php": "^7.3 || ^8.0", - "phpunit/phpunit": "^8.4 || ^9.3.3", - "spatie/laravel-ray": "^1.17.1" + "phpunit/phpunit": "^8.5.21 || ^9.5.10", + "spatie/laravel-ray": "^1.26.2" }, "type": "library", "extra": { @@ -4859,7 +5641,7 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v6.17.1" + "source": "https://github.com/orchestral/testbench/tree/v6.25.0" }, "funding": [ { @@ -4867,111 +5649,369 @@ "type": "custom" }, { - "url": "https://liberapay.com/crynobone", - "type": "liberapay" + "url": "https://liberapay.com/crynobone", + "type": "liberapay" + } + ], + "time": "2022-08-24T01:41:23+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v6.29.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "8eeace7d979a7905e6fab77a30a3b05da99459c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/8eeace7d979a7905e6fab77a30a3b05da99459c4", + "reference": "8eeace7d979a7905e6fab77a30a3b05da99459c4", + "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.75", + "laravel/laravel": "8.x-dev", + "mockery/mockery": "^1.4.4", + "orchestra/canvas": "^6.1", + "phpunit/phpunit": "^8.5.21 || ^9.5.10", + "spatie/laravel-ray": "^1.7.1", + "symfony/process": "^5.0" + }, + "suggest": { + "laravel/framework": "Required for testing (^8.75).", + "mockery/mockery": "Allow using Mockery for testing (^1.4.4).", + "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.5.21|^9.5.10|^10.0)." + }, + "bin": [ + "testbench" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench-core" + }, + "funding": [ + { + "url": "https://paypal.me/crynobone", + "type": "custom" + }, + { + "url": "https://liberapay.com/crynobone", + "type": "liberapay" + } + ], + "time": "2022-08-24T00:15:20+00:00" + }, + { + "name": "pestphp/pest", + "version": "v1.22.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "af6240b4eed8b049ac43c91184141ee337305df7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/af6240b4eed8b049ac43c91184141ee337305df7", + "reference": "af6240b4eed8b049ac43c91184141ee337305df7", + "shasum": "" + }, + "require": { + "nunomaduro/collision": "^5.10.0|^6.0", + "pestphp/pest-plugin": "^1.0.0", + "php": "^7.3 || ^8.0", + "phpunit/phpunit": "^9.5.5" + }, + "require-dev": { + "illuminate/console": "^8.47.0", + "illuminate/support": "^8.47.0", + "laravel/dusk": "^6.15.0", + "pestphp/pest-dev-tools": "dev-master", + "pestphp/pest-plugin-parallel": "^1.0" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-1.x": "1.x-dev" + }, + "pest": { + "plugins": [ + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Environment" + ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php", + "src/Pest.php" + ], + "psr-4": { + "Pest\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "An elegant PHP Testing Framework.", + "keywords": [ + "framework", + "pest", + "php", + "test", + "testing", + "unit" + ], + "support": { + "issues": "https://github.com/pestphp/pest/issues", + "source": "https://github.com/pestphp/pest/tree/v1.22.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/lukeraymonddowning", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/octoper", + "type": "github" + }, + { + "url": "https://github.com/olivernybroe", + "type": "github" + }, + { + "url": "https://github.com/owenvoke", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" + } + ], + "time": "2022-08-29T10:42:13+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "606c5f79c6a339b49838ffbee0151ca519efe378" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/606c5f79c6a339b49838ffbee0151ca519efe378", + "reference": "606c5f79c6a339b49838ffbee0151ca519efe378", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.1.0 || ^2.0.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "pestphp/pest": "<1.0" + }, + "require-dev": { + "composer/composer": "^2.4.2", + "pestphp/pest": "^1.22.1", + "pestphp/pest-dev-tools": "^1.0.0" + }, + "type": "composer-plugin", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "class": "Pest\\Plugin\\Manager" + }, + "autoload": { + "psr-4": { + "Pest\\Plugin\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Pest plugin manager", + "keywords": [ + "framework", + "manager", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=66BYDWAT92N6L", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2021-05-18T23:14:29+00:00" + "time": "2022-09-18T13:18:17+00:00" }, { - "name": "orchestra/testbench-core", - "version": "v6.21.3", + "name": "pestphp/pest-plugin-laravel", + "version": "v1.3.0", "source": { "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "e20e4ed5586993940679119c4eeaed3b21037ac5" + "url": "https://github.com/pestphp/pest-plugin-laravel.git", + "reference": "561930875e0336441f93fbd120fd53a2a890a8f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/e20e4ed5586993940679119c4eeaed3b21037ac5", - "reference": "e20e4ed5586993940679119c4eeaed3b21037ac5", + "url": "https://api.github.com/repos/pestphp/pest-plugin-laravel/zipball/561930875e0336441f93fbd120fd53a2a890a8f5", + "reference": "561930875e0336441f93fbd120fd53a2a890a8f5", "shasum": "" }, "require": { - "fakerphp/faker": "^1.9.1", - "php": "^7.3 || ^8.0", - "symfony/yaml": "^5.0", - "vlucas/phpdotenv": "^5.1" + "laravel/framework": "^7.30.6 || ^8.83.23 || ^9.30.1", + "pestphp/pest": "^1.22.1", + "php": "^7.3 || ^8.0" }, "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)." + "orchestra/testbench": "^5.20.0 || ^6.25.0 || ^7.7.0", + "pestphp/pest-dev-tools": "dev-master" }, - "bin": [ - "testbench" - ], "type": "library", "extra": { "branch-alias": { - "dev-master": "6.0-dev" + "dev-master": "1.x-dev" } }, "autoload": { + "files": [ + "src/Autoload.php" + ], "psr-4": { - "Orchestra\\Testbench\\": "src/" + "Pest\\Laravel\\": "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", + "description": "The Pest Laravel Plugin", "keywords": [ - "BDD", - "TDD", + "framework", "laravel", - "orchestra-platform", - "orchestral", - "testing" + "pest", + "php", + "test", + "testing", + "unit" ], "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" + "source": "https://github.com/pestphp/pest-plugin-laravel/tree/v1.3.0" }, "funding": [ { - "url": "https://paypal.me/crynobone", + "url": "https://www.paypal.com/paypalme/enunomaduro", "type": "custom" }, { - "url": "https://liberapay.com/crynobone", - "type": "liberapay" + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://www.patreon.com/nunomaduro", + "type": "patreon" } ], - "time": "2021-05-18T09:19:25+00:00" + "time": "2022-09-18T13:04:53+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133" + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", - "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", "shasum": "" }, "require": { @@ -5016,22 +6056,22 @@ "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/master" + "source": "https://github.com/phar-io/manifest/tree/2.0.3" }, - "time": "2020-06-27T14:33:11+00:00" + "time": "2021-07-20T11:28:43+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -5067,254 +6107,29 @@ "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": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "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/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.2.2", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556", - "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556", - "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" - }, - "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": "2020-09-03T19:13:55+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" - }, - "require-dev": { - "ext-tokenizer": "*" - }, - "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.4.0" - }, - "time": "2020-09-17T18:55:26+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" - } + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "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" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.6", + "version": "9.2.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f6293e1b30a2354e8428e004689671b83871edde" + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", - "reference": "f6293e1b30a2354e8428e004689671b83871edde", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.10.2", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -5363,7 +6178,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, "funding": [ { @@ -5371,20 +6186,20 @@ "type": "github" } ], - "time": "2021-03-28T07:26:59+00:00" + "time": "2022-08-30T12:24:04+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -5423,7 +6238,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -5431,7 +6246,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -5616,16 +6431,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.4", + "version": "9.5.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741" + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c73c6737305e779771147af66c96ca6a7ed8a741", - "reference": "c73c6737305e779771147af66c96ca6a7ed8a741", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", "shasum": "" }, "require": { @@ -5637,11 +6452,10 @@ "ext-xml": "*", "ext-xmlwriter": "*", "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.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-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", @@ -5655,13 +6469,9 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3", + "sebastian/type": "^3.1", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -5676,11 +6486,11 @@ } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -5703,11 +6513,11 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.4" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { @@ -5715,7 +6525,60 @@ "type": "github" } ], - "time": "2021-03-23T07:16:29+00:00" + "time": "2022-08-30T07:42:16+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1 || ^2.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.4@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", + "keywords": [ + "container", + "dependency injection" + ], + "support": { + "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + }, + "time": "2021-10-28T11:13:42+00:00" }, { "name": "sebastian/cli-parser", @@ -5886,16 +6749,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -5948,7 +6811,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -5956,7 +6819,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -6083,16 +6946,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", "shasum": "" }, "require": { @@ -6134,7 +6997,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" }, "funding": [ { @@ -6142,20 +7005,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2022-04-03T09:37:03+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.3", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65", - "reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -6204,14 +7067,14 @@ } ], "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "http://www.github.com/sebastianbergmann/exporter", + "homepage": "https://www.github.com/sebastianbergmann/exporter", "keywords": [ "export", "exporter" ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -6219,20 +7082,20 @@ "type": "github" } ], - "time": "2020-09-28T05:24:23+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.2", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/a90ccbddffa067b51f574dea6eb25d5680839455", - "reference": "a90ccbddffa067b51f574dea6eb25d5680839455", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { @@ -6275,7 +7138,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -6283,7 +7146,7 @@ "type": "github" } ], - "time": "2020-10-26T15:55:19+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", @@ -6574,28 +7437,28 @@ }, { "name": "sebastian/type", - "version": "2.3.1", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2" + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/81cd61ab7bbf2de744aba0ea61fae32f721df3d2", - "reference": "81cd61ab7bbf2de744aba0ea61fae32f721df3d2", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -6618,7 +7481,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.1" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" }, "funding": [ { @@ -6626,7 +7489,7 @@ "type": "github" } ], - "time": "2020-10-26T13:18:59+00:00" + "time": "2022-09-12T14:47:03+00:00" }, { "name": "sebastian/version", @@ -6683,16 +7546,16 @@ }, { "name": "spatie/backtrace", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e" + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", - "reference": "9b4df807fb65aaa8006dcd7a7ccdef8fb4bb002e", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", "shasum": "" }, "require": { @@ -6729,7 +7592,7 @@ ], "support": { "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.2.0" + "source": "https://github.com/spatie/backtrace/tree/1.2.1" }, "funding": [ { @@ -6741,43 +7604,47 @@ "type": "other" } ], - "time": "2021-05-19T12:49:10+00:00" + "time": "2021-11-09T10:57:15+00:00" }, { "name": "spatie/laravel-ray", - "version": "1.17.4", + "version": "1.31.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "e48be16da1952ffca868c77f509a767d3fc632bc" + "reference": "7394694afd89d05879e7a69c54abab73c1199acd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/e48be16da1952ffca868c77f509a767d3fc632bc", - "reference": "e48be16da1952ffca868c77f509a767d3fc632bc", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/7394694afd89d05879e7a69c54abab73c1199acd", + "reference": "7394694afd89d05879e7a69c54abab73c1199acd", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/contracts": "^7.20|^8.0", - "illuminate/database": "^7.20|^8.13", - "illuminate/queue": "^7.20|^8.13", - "illuminate/support": "^7.20|^8.13", + "illuminate/contracts": "^7.20|^8.19|^9.0", + "illuminate/database": "^7.20|^8.19|^9.0", + "illuminate/queue": "^7.20|^8.19|^9.0", + "illuminate/support": "^7.20|^8.19|^9.0", "php": "^7.3|^8.0", "spatie/backtrace": "^1.0", - "spatie/ray": "^1.21.2", - "symfony/stopwatch": "4.2|^5.1", - "zbateson/mail-mime-parser": "^1.3.1" + "spatie/ray": "^1.33", + "symfony/stopwatch": "4.2|^5.1|^6.0", + "zbateson/mail-mime-parser": "^1.3.1|^2.0" }, "require-dev": { - "facade/ignition": "^2.5", - "laravel/framework": "^7.20|^8.19", - "orchestra/testbench-core": "^5.0|^6.0", + "guzzlehttp/guzzle": "^7.3", + "laravel/framework": "^7.20|^8.19|^9.0", + "orchestra/testbench-core": "^5.0|^6.0|^7.0", + "phpstan/phpstan": "^0.12.93", "phpunit/phpunit": "^9.3", "spatie/phpunit-snapshot-assertions": "^4.2" }, "type": "library", "extra": { + "branch-alias": { + "dev-main": "1.29.x-dev" + }, "laravel": { "providers": [ "Spatie\\LaravelRay\\RayServiceProvider" @@ -6809,7 +7676,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.17.4" + "source": "https://github.com/spatie/laravel-ray/tree/1.31.0" }, "funding": [ { @@ -6821,24 +7688,24 @@ "type": "other" } ], - "time": "2021-04-30T08:20:24+00:00" + "time": "2022-09-20T13:13:22+00:00" }, { "name": "spatie/macroable", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/spatie/macroable.git", - "reference": "7a99549fc001c925714b329220dea680c04bfa48" + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/7a99549fc001c925714b329220dea680c04bfa48", - "reference": "7a99549fc001c925714b329220dea680c04bfa48", + "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", "shasum": "" }, "require": { - "php": "^7.2|^8.0" + "php": "^8.0" }, "require-dev": { "phpunit/phpunit": "^8.0|^9.3" @@ -6869,22 +7736,22 @@ ], "support": { "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/1.0.1" + "source": "https://github.com/spatie/macroable/tree/2.0.0" }, - "time": "2020-11-03T10:15:05+00:00" + "time": "2021-03-26T22:39:02+00:00" }, { "name": "spatie/ray", - "version": "1.22.1", + "version": "1.36.0", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "e82408b78b1391eaee6c962b13c37e80080dc15a" + "reference": "4a4def8cda4806218341b8204c98375aa8c34323" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/e82408b78b1391eaee6c962b13c37e80080dc15a", - "reference": "e82408b78b1391eaee6c962b13c37e80080dc15a", + "url": "https://api.github.com/repos/spatie/ray/zipball/4a4def8cda4806218341b8204c98375aa8c34323", + "reference": "4a4def8cda4806218341b8204c98375aa8c34323", "shasum": "" }, "require": { @@ -6894,25 +7761,25 @@ "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" + "symfony/stopwatch": "^4.0|^5.1|^6.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0" }, "require-dev": { - "illuminate/support": "6.x|^8.18", + "illuminate/support": "6.x|^8.18|^9.0", "nesbot/carbon": "^2.43", + "phpstan/phpstan": "^0.12.92", "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" - ] + ], + "psr-4": { + "Spatie\\Ray\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -6934,7 +7801,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.22.1" + "source": "https://github.com/spatie/ray/tree/1.36.0" }, "funding": [ { @@ -6946,25 +7813,25 @@ "type": "other" } ], - "time": "2021-04-28T09:47:47+00:00" + "time": "2022-08-11T14:04:18+00:00" }, { "name": "symfony/stopwatch", - "version": "v5.2.7", + "version": "v6.0.5", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "d99310c33e833def36419c284f60e8027d359678" + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/d99310c33e833def36419c284f60e8027d359678", - "reference": "d99310c33e833def36419c284f60e8027d359678", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f2c1780607ec6502f2121d9729fd8150a655d337", + "reference": "f2c1780607ec6502f2121d9729fd8150a655d337", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1.0|^2" + "php": ">=8.0.2", + "symfony/service-contracts": "^1|^2|^3" }, "type": "library", "autoload": { @@ -6992,7 +7859,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.3.0-BETA1" + "source": "https://github.com/symfony/stopwatch/tree/v6.0.5" }, "funding": [ { @@ -7008,32 +7875,32 @@ "type": "tidelift" } ], - "time": "2021-03-29T15:28:41+00:00" + "time": "2022-02-21T17:15:17+00:00" }, { "name": "symfony/yaml", - "version": "v5.2.9", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "d23115e4a3d50520abddccdbec9514baab1084c8" + "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/d23115e4a3d50520abddccdbec9514baab1084c8", - "reference": "d23115e4a3d50520abddccdbec9514baab1084c8", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", + "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", "shasum": "" }, "require": { "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1", - "symfony/polyfill-ctype": "~1.8" + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/console": "<4.4" + "symfony/console": "<5.3" }, "require-dev": { - "symfony/console": "^4.4|^5.0" + "symfony/console": "^5.3|^6.0" }, "suggest": { "symfony/console": "For validating YAML files using the lint command" @@ -7067,7 +7934,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.2.9" + "source": "https://github.com/symfony/yaml/tree/v5.4.12" }, "funding": [ { @@ -7083,20 +7950,20 @@ "type": "tidelift" } ], - "time": "2021-05-16T13:07:46+00:00" + "time": "2022-08-02T15:52:22+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.0", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "75a63c33a8577608444246075ea0af0d052e452a" + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a", - "reference": "75a63c33a8577608444246075ea0af0d052e452a", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", "shasum": "" }, "require": { @@ -7125,7 +7992,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/master" + "source": "https://github.com/theseer/tokenizer/tree/1.2.1" }, "funding": [ { @@ -7133,34 +8000,32 @@ "type": "github" } ], - "time": "2020-07-12T23:59:07+00:00" + "time": "2021-07-28T10:34:58+00:00" }, { "name": "zbateson/mail-mime-parser", - "version": "1.3.1", + "version": "2.2.2", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "706964d904798b8c22d63f62f0ec5f5bc84e30d9" + "reference": "318cd809afebe48e8fb41625b05b25470fb3fa86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/706964d904798b8c22d63f62f0ec5f5bc84e30d9", - "reference": "706964d904798b8c22d63f62f0ec5f5bc84e30d9", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/318cd809afebe48e8fb41625b05b25470fb3fa86", + "reference": "318cd809afebe48e8fb41625b05b25470fb3fa86", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.0", + "guzzlehttp/psr7": "^1.7.0|^2.0", "php": ">=5.4", + "pimple/pimple": "^3.0", "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.4" + "zbateson/stream-decorators": "^1.0.6" }, "require-dev": { - "jms/serializer": "^1.1", "mikey179/vfsstream": "^1.6.0", - "phing/phing": "^2.15.0", - "phpdocumentor/phpdocumentor": "^2.9.0", - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5" + "sanmai/phpunit-legacy-adapter": "^6.3 || ^8.2" }, "suggest": { "ext-iconv": "For best support/performance", @@ -7208,20 +8073,20 @@ "type": "github" } ], - "time": "2020-12-02T21:55:45+00:00" + "time": "2022-09-01T15:59:13+00:00" }, { "name": "zbateson/mb-wrapper", - "version": "1.0.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d" + "reference": "5d9d190ef18ce6d424e3ac6f5ebe13901f92b74a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", - "reference": "721b3dfbf7ab75fee5ac60a542d7923ffe59ef6d", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/5d9d190ef18ce6d424e3ac6f5ebe13901f92b74a", + "reference": "5d9d190ef18ce6d424e3ac6f5ebe13901f92b74a", "shasum": "" }, "require": { @@ -7230,7 +8095,7 @@ "symfony/polyfill-mbstring": "^1.9" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5" + "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" }, "suggest": { "ext-iconv": "For best support/performance", @@ -7267,7 +8132,7 @@ ], "support": { "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.0.1" + "source": "https://github.com/zbateson/mb-wrapper/tree/1.1.2" }, "funding": [ { @@ -7275,29 +8140,29 @@ "type": "github" } ], - "time": "2020-10-21T22:14:27+00:00" + "time": "2022-05-26T15:55:05+00:00" }, { "name": "zbateson/stream-decorators", - "version": "1.0.4", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "6f54738dfecc65e1d5bfb855035836748083a6dd" + "reference": "8f8ca208572963258b7e6d91106181706deacd10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/6f54738dfecc65e1d5bfb855035836748083a6dd", - "reference": "6f54738dfecc65e1d5bfb855035836748083a6dd", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/8f8ca208572963258b7e6d91106181706deacd10", + "reference": "8f8ca208572963258b7e6d91106181706deacd10", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.0.0", + "guzzlehttp/psr7": "^1.7.0|^2.0", "php": ">=5.4", "zbateson/mb-wrapper": "^1.0.0" }, "require-dev": { - "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5" + "sanmai/phpunit-legacy-adapter": "^6.3 || ^8" }, "type": "library", "autoload": { @@ -7328,7 +8193,7 @@ ], "support": { "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/master" + "source": "https://github.com/zbateson/stream-decorators/tree/1.0.7" }, "funding": [ { @@ -7336,7 +8201,7 @@ "type": "github" } ], - "time": "2020-08-10T18:59:43+00:00" + "time": "2022-09-08T15:44:55+00:00" } ], "aliases": [], @@ -7348,5 +8213,5 @@ "php": "^7.4|^8.0" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.1.0" } diff --git a/src/Endpoints/Comments.php b/src/Endpoints/Comments.php new file mode 100644 index 0000000..f220c66 --- /dev/null +++ b/src/Endpoints/Comments.php @@ -0,0 +1,123 @@ +get( + $this->url(Endpoint::COMMENTS."?block_id={$blockId}&{$this->buildPaginationQuery()}") + ); + + return new CommentCollection($response->json()); + } + + /** + * @param string $discussionId + * @return Comments + */ + public function onDiscussion(string $discussionId): self + { + if ($this->pageId !== null) { + throw new HandlingException('You can only use `onDiscussion()` or `onPage()`.'); + } + + $this->discussionId = $discussionId; + + return $this; + } + + /** + * @param string $pageId + * @return Comments + */ + public function onPage(string $pageId): self + { + if ($this->discussionId !== null) { + throw new HandlingException('You can only use `onDiscussion()` or `onPage()`.'); + } + + $this->pageId = $pageId; + + return $this; + } + + /** + * Create a comment + * url: https://api.notion.com/{version}/comments [post] + * notion-api-docs: https://developers.notion.com/reference/create-a-comment. + * + * @param CommentEntity $comment + * @return CommentEntity + * + * @throws HandlingException + * @throws NotionException + */ + public function create($comment): CommentEntity + { + if ($this->discussionId === null && $this->pageId === null) { + throw new HandlingException('You must use `onDiscussion()` or `onPage()`.'); + } + + $body = $comment->getRawResponse(); + if ($this->discussionId !== null) { + $body['discussion_id'] = $this->discussionId; + } else { + $body['parent'] = [ + 'page_id' => $this->pageId, + ]; + } + + $response = $this->post( + $this->url(Endpoint::COMMENTS), + $body + ); + + return new CommentEntity($response->json()); + } +} diff --git a/src/Endpoints/Database.php b/src/Endpoints/Database.php index 90a1c90..84eb58d 100644 --- a/src/Endpoints/Database.php +++ b/src/Endpoints/Database.php @@ -4,8 +4,11 @@ use FiveamCode\LaravelNotionApi\Entities\Collections\EntityCollection; use FiveamCode\LaravelNotionApi\Entities\Collections\PageCollection; +use FiveamCode\LaravelNotionApi\Exceptions\HandlingException; use FiveamCode\LaravelNotionApi\Notion; use FiveamCode\LaravelNotionApi\Query\Filters\Filter; +use FiveamCode\LaravelNotionApi\Query\Filters\FilterBag; +use FiveamCode\LaravelNotionApi\Query\Filters\Operators; use FiveamCode\LaravelNotionApi\Query\Sorting; use Illuminate\Support\Collection; @@ -20,9 +23,13 @@ class Database extends Endpoint private string $databaseId; /** - * @var Collection + * @var Filter|null */ - private Collection $filter; + private ?Filter $filter = null; // TODO breaking change as well + + private $filterBag; + + private array $filterData = []; /** * @var Collection @@ -43,7 +50,6 @@ public function __construct(string $databaseId, Notion $notion) $this->databaseId = $databaseId; $this->sorts = new Collection(); - $this->filter = new Collection(); parent::__construct($notion); } @@ -55,6 +61,18 @@ public function __construct(string $databaseId, Notion $notion) * @throws \FiveamCode\LaravelNotionApi\Exceptions\NotionException */ public function query(): PageCollection + { + $response = $this + ->post( + $this->url(Endpoint::DATABASES."/{$this->databaseId}/query"), + $this->getPostData() + ) + ->json(); + + return new PageCollection($response); + } + + public function getPostData(): array { $postData = []; @@ -62,9 +80,11 @@ public function query(): PageCollection $postData['sorts'] = Sorting::sortQuery($this->sorts); } - if ($this->filter->isNotEmpty()) { - $postData['filter']['or'] = Filter::filterQuery($this->filter); - } // TODO Compound filters! + if ($this->filter !== null && ! is_null($this->filterBag)) { + throw new HandlingException('Please provide either a filter bag or a single filter.'); + } elseif ($this->filter !== null || ! is_null($this->filterBag)) { + $postData['filter'] = $this->filterData; + } if ($this->startCursor !== null) { $postData['start_cursor'] = $this->startCursor->__toString(); @@ -74,34 +94,87 @@ public function query(): PageCollection $postData['page_size'] = $this->pageSize; } - $response = $this - ->post( - $this->url(Endpoint::DATABASES."/{$this->databaseId}/query"), - $postData - ) - ->json(); + return $postData; + } - return new PageCollection($response); + /** + * @param $filter + * @return Database $this + * + * @throws HandlingException + */ + public function filterBy(Collection|Filter|FilterBag $filter): Database + { + if ($filter instanceof Collection) { + return $this->filterByCollection($filter); + } + if ($filter instanceof FilterBag) { + return $this->filterByBag($filter); + } + if ($filter instanceof Filter) { + return $this->filterBySingleFilter($filter); + } + + return $this; } /** - * @param Collection $filter + * @param Filter $filter * @return $this + * + * @throws HandlingException */ - public function filterBy(Collection $filter): Database + public function filterBySingleFilter(Filter $filter): Database { $this->filter = $filter; + $this->filterData = ['or' => [$filter->toQuery()]]; return $this; } /** - * @param Collection $sorts - * @return $this + * @param FilterBag $filterBag + * @return Database $this */ - public function sortBy(Collection $sorts): Database + public function filterByBag(FilterBag $filterBag): Database { - $this->sorts = $sorts; + $this->filterBag = $filterBag; + $this->filterData = $filterBag->toQuery(); + + return $this; + } + + /** + * @param Collection $filterCollection + * @return Database $this + */ + public function filterByCollection(Collection $filterCollection): Database + { + $filterBag = new FilterBag(Operators::OR); + $filterBag->addFilters($filterCollection); + + return $this->filterByBag($filterBag); + } + + /** + * @param Collection|Sorting $sorts + * @return Database $this + * + * @throws HandlingException + */ + public function sortBy(Sorting|Collection $sorts): Database + { + $sortInstance = get_class($sorts); + switch ($sortInstance) { + case Sorting::class: + $this->sorts->push($sorts); + break; + case Collection::class: + $this->sorts = $sorts; + break; + default: + throw new HandlingException("The parameter 'sorts' must be either a instance of the class Sorting or a Collection of sortings."); + } return $this; } diff --git a/src/Endpoints/Endpoint.php b/src/Endpoints/Endpoint.php index 9d29ae7..871c60a 100644 --- a/src/Endpoints/Endpoint.php +++ b/src/Endpoints/Endpoint.php @@ -19,6 +19,7 @@ class Endpoint public const PAGES = 'pages'; public const USERS = 'users'; public const SEARCH = 'search'; + public const COMMENTS = 'comments'; /** * @var Notion diff --git a/src/Endpoints/Search.php b/src/Endpoints/Search.php index a11ae08..49734de 100644 --- a/src/Endpoints/Search.php +++ b/src/Endpoints/Search.php @@ -61,7 +61,7 @@ public function query(): EntityCollection } if ($this->startCursor !== null) { - $postData['start_cursor'] = $this->startCursor; + $postData['start_cursor'] = $this->startCursor->__toString(); } if ($this->pageSize !== null) { @@ -159,15 +159,4 @@ public function filterBy(string $filter): Search return $this; } - - /** - * @param Sorting $sort - * @return $this - */ - public function sortBy(Sorting $sort): Search - { - $this->sort = $sort; - - return $this; - } } diff --git a/src/Entities/Blocks/Block.php b/src/Entities/Blocks/Block.php index 68fb58e..507ef60 100644 --- a/src/Entities/Blocks/Block.php +++ b/src/Entities/Blocks/Block.php @@ -2,9 +2,11 @@ namespace FiveamCode\LaravelNotionApi\Entities\Blocks; -use DateTime; use FiveamCode\LaravelNotionApi\Entities\Entity; use FiveamCode\LaravelNotionApi\Exceptions\HandlingException; +use FiveamCode\LaravelNotionApi\Traits\HasArchive; +use FiveamCode\LaravelNotionApi\Traits\HasParent; +use FiveamCode\LaravelNotionApi\Traits\HasTimestamps; use Illuminate\Support\Arr; /** @@ -12,6 +14,8 @@ */ class Block extends Entity { + use HasTimestamps, HasArchive, HasParent; + /** * @var string */ @@ -37,16 +41,6 @@ class Block extends Entity */ protected string $text = '[warning: unsupported in notion api]'; - /** - * @var DateTime - */ - protected DateTime $createdTime; - - /** - * @var DateTime - */ - protected DateTime $lastEditedTime; - /** * @param array $responseData * @@ -65,12 +59,10 @@ protected function setResponseData(array $responseData): void protected function fillFromRaw(): void { - $this->fillId(); + parent::fillEssentials(); $this->fillType(); $this->fillRawContent(); $this->fillHasChildren(); - $this->fillCreatedTime(); - $this->fillLastEditedTime(); } private function fillType(): void @@ -126,22 +118,6 @@ public function hasChildren(): bool return $this->hasChildren; } - /** - * @return DateTime - */ - public function getCreatedTime(): DateTime - { - return $this->createdTime; - } - - /** - * @return DateTime - */ - public function getLastEditedTime(): DateTime - { - return $this->lastEditedTime; - } - public function getContent() { return $this->content; diff --git a/src/Entities/Collections/CommentCollection.php b/src/Entities/Collections/CommentCollection.php new file mode 100644 index 0000000..103c314 --- /dev/null +++ b/src/Entities/Collections/CommentCollection.php @@ -0,0 +1,23 @@ +collection = new Collection(); + foreach ($this->rawResults as $commentContent) { + $this->collection->add(new Comment($commentContent)); + } + } +} diff --git a/src/Entities/Comment.php b/src/Entities/Comment.php new file mode 100644 index 0000000..f3062fc --- /dev/null +++ b/src/Entities/Comment.php @@ -0,0 +1,122 @@ +setResponseData($rawResponse); + } + } + + public static function fromText($content): Comment + { + $commentEntity = new Comment(); + + if (is_string($content)) { + $richText = new RichText(); + $richText->setPlainText($content); + $commentEntity->richText = $richText; + } else { + $commentEntity->richText = $content; + } + + //!INFO: Currently only plain_text is transfered into rawContent + //TODO: Later the RichText has to return it's raw structure into 'content' + $commentEntity->responseData = [ + 'rich_text' => [ + [ + 'type' => 'text', + 'text' => [ + 'content' => $commentEntity->getText(), + ], + ], + ], + ]; + + return $commentEntity; + } + + /** + * @param array $responseData + * + * @throws HandlingException + * @throws \FiveamCode\LaravelNotionApi\Exceptions\NotionException + */ + protected function setResponseData(array $responseData): void + { + parent::setResponseData($responseData); + if ($responseData['object'] !== 'comment') { + throw HandlingException::instance('invalid json-array: the given object is not a comment'); + } + $this->fillFromRaw(); + } + + private function fillFromRaw(): void + { + parent::fillEssentials(); + $this->fillRichText(); + $this->fillDiscussionId(); + } + + private function fillDiscussionId(): void + { + if (Arr::exists($this->responseData, 'discussion_id') && $this->responseData['discussion_id'] !== null) { + $this->discussionId = $this->responseData['discussion_id']; + } + } + + private function fillRichText(): void + { + if (Arr::exists($this->responseData, 'rich_text') && $this->responseData['rich_text'] !== null) { + $this->richText = new RichText($this->responseData['rich_text']); + } + } + + /** + * @return string + */ + public function getDiscussionId(): string + { + return $this->discussionId; + } + + /** + * @return RichText + */ + public function getRichText(): RichText + { + return $this->richText; + } + + /** + * @return string + */ + public function getText(): string + { + return $this->getRichText()->getPlainText(); + } +} diff --git a/src/Entities/Database.php b/src/Entities/Database.php index 453c106..9df0eee 100644 --- a/src/Entities/Database.php +++ b/src/Entities/Database.php @@ -2,9 +2,12 @@ namespace FiveamCode\LaravelNotionApi\Entities; -use DateTime; use FiveamCode\LaravelNotionApi\Entities\Properties\Property; +use FiveamCode\LaravelNotionApi\Entities\PropertyItems\RichText; use FiveamCode\LaravelNotionApi\Exceptions\HandlingException; +use FiveamCode\LaravelNotionApi\Traits\HasArchive; +use FiveamCode\LaravelNotionApi\Traits\HasParent; +use FiveamCode\LaravelNotionApi\Traits\HasTimestamps; use Illuminate\Support\Arr; use Illuminate\Support\Collection; @@ -13,11 +16,18 @@ */ class Database extends Entity { + use HasTimestamps, HasArchive, HasParent; + /** * @var string */ protected string $title = ''; + /** + * @var string + */ + protected string $description = ''; + /** * @var string */ @@ -44,14 +54,19 @@ class Database extends Entity private string $url; /** - * @var string + * @var ?RichText */ - protected string $objectType = ''; + protected ?RichText $richTitle = null; /** - * @var array + * @var ?RichText */ - protected array $rawTitle = []; + protected ?RichText $richDescription = null; + + /** + * @var bool + */ + protected bool $isInline = false; /** * @var array @@ -73,16 +88,6 @@ class Database extends Entity */ protected Collection $properties; - /** - * @var DateTime - */ - protected DateTime $createdTime; - - /** - * @var DateTime - */ - protected DateTime $lastEditedTime; - protected function setResponseData(array $responseData): void { parent::setResponseData($responseData); @@ -94,22 +99,36 @@ protected function setResponseData(array $responseData): void private function fillFromRaw() { - $this->fillId(); + parent::fillEssentials(); $this->fillIcon(); $this->fillCover(); $this->fillTitle(); - $this->fillObjectType(); + $this->fillIsInline(); + $this->fillDescription(); $this->fillProperties(); $this->fillDatabaseUrl(); - $this->fillCreatedTime(); - $this->fillLastEditedTime(); } private function fillTitle(): void { if (Arr::exists($this->responseData, 'title') && is_array($this->responseData['title'])) { $this->title = Arr::first($this->responseData['title'], null, ['plain_text' => ''])['plain_text']; - $this->rawTitle = $this->responseData['title']; + $this->richTitle = new RichText($this->responseData['title']); + } + } + + private function fillIsInline(): void + { + if (Arr::exists($this->responseData, 'is_inline')) { + $this->isInline = $this->responseData['is_inline']; + } + } + + private function fillDescription(): void + { + if (Arr::exists($this->responseData, 'description') && is_array($this->responseData['description'])) { + $this->description = Arr::first($this->responseData['description'], null, ['plain_text' => ''])['plain_text']; + $this->richDescription = new RichText($this->responseData['description']); } } @@ -146,13 +165,6 @@ private function fillCover(): void } } - private function fillObjectType(): void - { - if (Arr::exists($this->responseData, 'object')) { - $this->objectType = $this->responseData['object']; - } - } - private function fillProperties(): void { if (Arr::exists($this->responseData, 'properties')) { @@ -184,17 +196,25 @@ public function getProperty(string $propertyKey): ?Property /** * @return string */ - public function getObjectType(): string + public function getTitle(): string { - return $this->objectType; + return $this->title; + } + + /** + * @return bool + */ + public function isInline(): bool + { + return $this->isInline; } /** * @return string */ - public function getTitle(): string + public function getDescription(): string { - return $this->title; + return $this->description; } /** @@ -246,42 +266,34 @@ public function getProperties(): Collection } /** - * @return array + * @return ?RichText */ - public function getRawTitle(): array + public function getRichTitle(): ?RichText { - return $this->rawTitle; + return $this->richTitle; } /** - * @return array + * @return ?RichText */ - public function getRawProperties(): array + public function getRichDescription(): ?RichText { - return $this->rawProperties; + return $this->richDescription; } /** * @return array */ - public function getPropertyKeys(): array - { - return $this->propertyKeys; - } - - /** - * @return DateTime - */ - public function getCreatedTime(): DateTime + public function getRawProperties(): array { - return $this->createdTime; + return $this->rawProperties; } /** * @return array */ - public function getLastEditedTime(): DateTime + public function getPropertyKeys(): array { - return $this->lastEditedTime; + return $this->propertyKeys; } } diff --git a/src/Entities/Entity.php b/src/Entities/Entity.php index 9e571bd..b23671f 100644 --- a/src/Entities/Entity.php +++ b/src/Entities/Entity.php @@ -2,7 +2,6 @@ namespace FiveamCode\LaravelNotionApi\Entities; -use Carbon\Carbon; use FiveamCode\LaravelNotionApi\Exceptions\HandlingException; use FiveamCode\LaravelNotionApi\Exceptions\NotionException; use Illuminate\Support\Arr; @@ -18,6 +17,11 @@ class Entity implements JsonSerializable */ private string $id; + /** + * @var string + */ + protected string $objectType = ''; + /** * @var array */ @@ -68,25 +72,62 @@ protected function setResponseData(array $responseData): void $this->responseData = $responseData; } - protected function fillCreatedTime() + protected function fillEssentials(): void + { + $this->fillId(); + $this->fillObjectType(); + $this->fillTraitAttributes(); + } + + private function fillTraitAttributes(): void { - if (Arr::exists($this->responseData, 'created_time')) { - $this->createdTime = new Carbon($this->responseData['created_time']); + $traitMapping = [ + 'FiveamCode\LaravelNotionApi\Traits\HasTimestamps' => function ($entity) { + $entity->fillTimestampableAttributes(); + }, + 'FiveamCode\LaravelNotionApi\Traits\HasParent' => function ($entity) { + $entity->fillParentAttributes(); + }, + 'FiveamCode\LaravelNotionApi\Traits\HasArchive' => function ($entity) { + $entity->fillArchivedAttributes(); + }, + ]; + + $traits = $this->class_uses_deep($this); + foreach ($traits as $trait) { + if (Arr::exists($traitMapping, $trait)) { + $traitMapping[$trait]($this); + } } } - protected function fillLastEditedTime() + private function class_uses_deep($class, $autoload = true) { - if (Arr::exists($this->responseData, 'last_edited_time')) { - $this->lastEditedTime = new Carbon($this->responseData['last_edited_time']); + $traits = []; + + do { + $traits = array_merge(class_uses($class, $autoload), $traits); + } while ($class = get_parent_class($class)); + + foreach ($traits as $trait => $same) { + $traits = array_merge(class_uses($trait, $autoload), $traits); } + + return array_unique($traits); } - protected function fillId() + private function fillId() { $this->id = $this->responseData['id']; } + private function fillObjectType(): void + { + if (Arr::exists($this->responseData, 'object')) { + $this->objectType = $this->responseData['object']; + } + } + /** * @return string */ @@ -100,6 +141,14 @@ public function setId($id): void $this->id = $id; } + /** + * @return string + */ + public function getObjectType(): string + { + return $this->objectType; + } + /** * @return array */ diff --git a/src/Entities/Page.php b/src/Entities/Page.php index 77e6609..c857162 100644 --- a/src/Entities/Page.php +++ b/src/Entities/Page.php @@ -17,6 +17,9 @@ use FiveamCode\LaravelNotionApi\Entities\Properties\Title; use FiveamCode\LaravelNotionApi\Entities\Properties\Url; use FiveamCode\LaravelNotionApi\Exceptions\HandlingException; +use FiveamCode\LaravelNotionApi\Traits\HasArchive; +use FiveamCode\LaravelNotionApi\Traits\HasParent; +use FiveamCode\LaravelNotionApi\Traits\HasTimestamps; use Illuminate\Support\Arr; use Illuminate\Support\Collection; @@ -25,6 +28,8 @@ */ class Page extends Entity { + use HasTimestamps, HasArchive, HasParent; + /** * @var string */ @@ -55,11 +60,6 @@ class Page extends Entity */ private string $coverType = ''; - /** - * @var string - */ - protected string $objectType = ''; - /** * @var array */ @@ -80,16 +80,6 @@ class Page extends Entity */ protected Collection $properties; - /** - * @var DateTime - */ - protected DateTime $createdTime; - - /** - * @var DateTime - */ - protected DateTime $lastEditedTime; - /** * Page constructor. * @@ -121,22 +111,12 @@ protected function setResponseData(array $responseData): void private function fillFromRaw(): void { - $this->fillId(); - $this->fillObjectType(); + parent::fillEssentials(); $this->fillProperties(); $this->fillTitle(); // This has to be called after fillProperties(), since title is provided by properties $this->fillPageUrl(); $this->fillIcon(); $this->fillCover(); - $this->fillCreatedTime(); - $this->fillLastEditedTime(); - } - - private function fillObjectType(): void - { - if (Arr::exists($this->responseData, 'object')) { - $this->objectType = $this->responseData['object']; - } } /** @@ -450,14 +430,6 @@ public function getProperty(string $propertyKey): ?Property return $this->propertyMap[$propertyKey]; } - /** - * @return string - */ - public function getObjectType(): string - { - return $this->objectType; - } - /** * @return array */ @@ -473,20 +445,4 @@ public function getPropertyKeys(): array { return $this->propertyKeys; } - - /** - * @return DateTime - */ - public function getCreatedTime(): DateTime - { - return $this->createdTime; - } - - /** - * @return DateTime - */ - public function getLastEditedTime(): DateTime - { - return $this->lastEditedTime; - } } diff --git a/src/Entities/Properties/Date.php b/src/Entities/Properties/Date.php index 5a7fc1f..332d1f2 100644 --- a/src/Entities/Properties/Date.php +++ b/src/Entities/Properties/Date.php @@ -97,7 +97,7 @@ protected function fillDate(): void $richDate->setHasTime($this->isIsoTimeString($startAsIsoString)); } - if (Arr::exists($this->rawContent, 'end')) { + if (Arr::exists($this->rawContent, 'end') && $this->rawContent['end'] !== null) { $endAsIsoString = $this->rawContent['end']; $richDate->setEnd(new DateTime($endAsIsoString)); } diff --git a/src/Entities/Properties/Property.php b/src/Entities/Properties/Property.php index 2ceb17c..e647f31 100644 --- a/src/Entities/Properties/Property.php +++ b/src/Entities/Properties/Property.php @@ -62,7 +62,7 @@ protected function setResponseData(array $responseData): void protected function fillFromRaw(): void { - $this->fillId(); + parent::fillEssentials(); $this->fillType(); $this->fillContent(); } diff --git a/src/Entities/Properties/Text.php b/src/Entities/Properties/Text.php index 7fad01c..84df2e4 100644 --- a/src/Entities/Properties/Text.php +++ b/src/Entities/Properties/Text.php @@ -77,6 +77,14 @@ public function getContent(): RichText return $this->getRichText(); } + /** + * @return string + */ + public function asText(): string + { + return $this->getPlainText(); + } + /** * @return RichText */ diff --git a/src/Entities/Properties/Title.php b/src/Entities/Properties/Title.php index 4962a06..5d7e502 100644 --- a/src/Entities/Properties/Title.php +++ b/src/Entities/Properties/Title.php @@ -76,6 +76,14 @@ public function getContent(): RichText return $this->getRichText(); } + /** + * @return string + */ + public function asText(): string + { + return $this->getPlainText(); + } + /** * @return RichText */ diff --git a/src/Entities/PropertyItems/SelectItem.php b/src/Entities/PropertyItems/SelectItem.php index 42e8437..1cf7cb3 100644 --- a/src/Entities/PropertyItems/SelectItem.php +++ b/src/Entities/PropertyItems/SelectItem.php @@ -36,7 +36,7 @@ protected function setResponseData(array $responseData): void protected function fillFromRaw(): void { - $this->fillId(); + parent::fillEssentials(); $this->fillName(); $this->fillColor(); } diff --git a/src/Entities/User.php b/src/Entities/User.php index e337bf3..87ae619 100644 --- a/src/Entities/User.php +++ b/src/Entities/User.php @@ -37,7 +37,7 @@ protected function setResponseData(array $responseData): void private function fillFromRaw(): void { - $this->fillId(); + parent::fillEssentials(); $this->fillName(); $this->fillAvatarUrl(); } diff --git a/src/Exceptions/NotionException.php b/src/Exceptions/NotionException.php index 846ccfc..0025899 100644 --- a/src/Exceptions/NotionException.php +++ b/src/Exceptions/NotionException.php @@ -16,7 +16,17 @@ class NotionException extends LaravelNotionAPIException */ public static function instance(string $message, array $payload = []): NotionException { - $e = new NotionException($message); + $code = 0; + + $responseDataExists = array_key_exists('responseData', $payload); + + if ($responseDataExists) { + $responseData = $payload['responseData']; + + $code = array_key_exists('status', $responseData) ? $responseData['status'] : 0; + } + + $e = new NotionException($message, $code); $e->payload = $payload; return $e; @@ -46,7 +56,7 @@ public static function fromResponse(Response $response): NotionException return new NotionException( $message, - 0, + $response->status(), $response->toException() ); } diff --git a/src/Notion.php b/src/Notion.php index 8ef9eca..e371dc2 100644 --- a/src/Notion.php +++ b/src/Notion.php @@ -3,6 +3,7 @@ namespace FiveamCode\LaravelNotionApi; use FiveamCode\LaravelNotionApi\Endpoints\Block; +use FiveamCode\LaravelNotionApi\Endpoints\Comments; use FiveamCode\LaravelNotionApi\Endpoints\Database; use FiveamCode\LaravelNotionApi\Endpoints\Databases; use FiveamCode\LaravelNotionApi\Endpoints\Endpoint; @@ -184,6 +185,17 @@ public function search(?string $searchText = ''): Search return new Search($this, $searchText); } + /** + * @return Comments + * + * @throws Exceptions\LaravelNotionAPIException + * @throws HandlingException + */ + public function comments(): Comments + { + return new Comments($this); + } + /** * @return string */ @@ -227,7 +239,7 @@ private function buildRequestHeader(): array } /** - * Due to the inconsistency of the Notion API requiring a endpoint url + * Due to the inconsistency of the Notion API requiring an endpoint url * with v* as well as a dated version in the request header, this method * maps the given version (e.g. v1) to the version date Notion requires * in the header (e.g. "2021-05-13"). diff --git a/src/Query/Filters/Filter.php b/src/Query/Filters/Filter.php index e5805ab..def06c8 100644 --- a/src/Query/Filters/Filter.php +++ b/src/Query/Filters/Filter.php @@ -150,7 +150,7 @@ public static function filterQuery(Collection $filter): array { $queryFilter = new Collection(); - $filter->each(function (Filter $filter) use ($queryFilter) { + $filter->each(function ($filter) use ($queryFilter) { $queryFilter->add($filter->toQuery()); }); diff --git a/src/Query/Filters/FilterBag.php b/src/Query/Filters/FilterBag.php new file mode 100644 index 0000000..61eca69 --- /dev/null +++ b/src/Query/Filters/FilterBag.php @@ -0,0 +1,126 @@ +isValidOperator($operator); + + $this->content = new Collection; + $this->operator = $operator; + } + + /** + * @param Filter $filter + * @return $this + */ + public function addFilter(Filter $filter): self + { + $this->content->add($filter); + + return $this; + } + + public function addFilters(Collection $filters): self + { + foreach ($filters as $filter) { + if (! $filter instanceof Filter) { + throw new HandlingException('The filter bag must only contain filter objects.'); + } + $this->addFilter($filter); + } + + return $this; + } + + /** + * @throws HandlingException|Throwable + */ + public function addFilterBag(FilterBag $filterBag): self + { + // A filter bag can only be added to another filter bag if it does not have a parent yet and does not + // contain any other filter bags. + throw_if($this->parentFilterBag !== null, new HandlingException('The maximum nesting level of compound filters must not exceed 2.')); + + $filterBag->content->each(function ($bag) { + throw_if($bag instanceof FilterBag, new HandlingException('The maximum nesting level of compound filters must not exceed 2.')); + }); + + $filterBag->parentFilterBag = $this; + $this->content->add($filterBag); + + return $this; + } + + /** + * @return array + */ + public function toQuery() + { + $filters = $this->content->map(function ($set) { + return $set->toQuery(); + })->toArray(); + + return [ + $this->operator => $filters, + ]; + } + + private function isValidOperator($operator) + { + $validOperators = ['and', 'or']; + + throw_if( + ! in_array($operator, $validOperators), + new HandlingException('Invalid operator for FilterBag: '.$operator) + ); + } +} diff --git a/src/Query/Filters/Operators.php b/src/Query/Filters/Operators.php index 5531095..77e9401 100644 --- a/src/Query/Filters/Operators.php +++ b/src/Query/Filters/Operators.php @@ -30,6 +30,9 @@ class Operators const NEXT_MONTH = 'next_month'; const NEXT_YEAR = 'next_year'; + const AND = 'and'; + const OR = 'or'; + // TODO: Formula filter condition public static function getValidComparisonOperators($filterType) diff --git a/src/Query/Sorting.php b/src/Query/Sorting.php index 919f095..113724d 100644 --- a/src/Query/Sorting.php +++ b/src/Query/Sorting.php @@ -93,16 +93,20 @@ public function toArray(): array } /** - * @param Collection $sortings + * @param Sorting|Collection $sortings * @return array */ - public static function sortQuery(Collection $sortings): array + public static function sortQuery(Sorting|Collection $sortings): array { $querySortings = new Collection(); - $sortings->each(function (Sorting $sorting) use ($querySortings) { - $querySortings->add($sorting->toArray()); - }); + if ($sortings instanceof Collection) { + $sortings->each(function (Sorting $sorting) use ($querySortings) { + $querySortings->push($sorting->toArray()); + }); + } else { + $querySortings->push($sortings->toArray()); + } return $querySortings->toArray(); } diff --git a/src/Traits/HasArchive.php b/src/Traits/HasArchive.php new file mode 100644 index 0000000..1235ea7 --- /dev/null +++ b/src/Traits/HasArchive.php @@ -0,0 +1,41 @@ +fillArchived(); + } + + private function fillArchived(): void + { + if (Arr::exists($this->responseData, 'archived')) { + $this->archived = $this->responseData['archived']; + } + } + + /** + * @return bool + */ + public function isArchived(): bool + { + return $this->archived; + } +} diff --git a/src/Traits/HasParent.php b/src/Traits/HasParent.php new file mode 100644 index 0000000..8356ae6 --- /dev/null +++ b/src/Traits/HasParent.php @@ -0,0 +1,57 @@ +fillParent(); + } + + private function fillParent(): void + { + if (Arr::exists($this->responseData, 'parent') && Arr::exists($this->responseData['parent'], 'type')) { + $this->parentType = $this->responseData['parent']['type']; + if (Arr::exists($this->responseData['parent'], $this->parentType)) { + $this->parentId = $this->responseData['parent'][$this->parentType]; + } + } + } + + /** + * @return string + */ + public function getParentId(): string + { + return $this->parentId; + } + + /** + * @return string + */ + public function getParentType(): string + { + return $this->parentType; + } +} diff --git a/src/Traits/HasTimestamps.php b/src/Traits/HasTimestamps.php new file mode 100644 index 0000000..2e769c4 --- /dev/null +++ b/src/Traits/HasTimestamps.php @@ -0,0 +1,107 @@ +fillCreatedTime(); + $this->fillLastEditedTime(); + $this->fillCreatedBy(); + $this->fillLastEditedBy(); + } + + private function fillCreatedTime(): void + { + if (Arr::exists($this->responseData, 'created_time')) { + $this->createdTime = new Carbon($this->responseData['created_time']); + } + } + + private function fillLastEditedTime(): void + { + if (Arr::exists($this->responseData, 'last_edited_time')) { + $this->lastEditedTime = new Carbon($this->responseData['last_edited_time']); + } + } + + private function fillCreatedBy(): void + { + if (Arr::exists($this->responseData, 'created_by')) { + $this->createdBy = new User($this->responseData['created_by']); + } + } + + private function fillLastEditedBy(): void + { + if (Arr::exists($this->responseData, 'last_edited_by')) { + $this->lastEditedBy = new User($this->responseData['last_edited_by']); + } + } + + /** + * @return ?DateTime + */ + public function getCreatedTime(): ?DateTime + { + return $this->createdTime; + } + + /** + * @return ?DateTime + */ + public function getLastEditedTime(): ?DateTime + { + return $this->lastEditedTime; + } + + /** + * @return ?User + */ + public function getCreatedBy(): ?User + { + return $this->createdBy; + } + + /** + * @return ?User + */ + public function getLastEditedBy(): ?User + { + return $this->lastEditedBy; + } +} diff --git a/tests/EndpointBlocksTest.php b/tests/EndpointBlocksTest.php index eb353cc..089814f 100644 --- a/tests/EndpointBlocksTest.php +++ b/tests/EndpointBlocksTest.php @@ -45,6 +45,7 @@ public function it_throws_a_notion_exception_bad_request() $this->expectException(NotionException::class); $this->expectExceptionMessage('Bad Request'); + $this->expectExceptionCode(400); Notion::block('b55c9c91-384d-452b-81db-d1ef79372b76')->children(); } @@ -216,6 +217,7 @@ public function it_throws_a_notion_exception_not_found() $this->expectException(NotionException::class); $this->expectExceptionMessage('Not found'); + $this->expectExceptionCode(404); Notion::block('b55c9c91-384d-452b-81db-d1ef79372b11')->children(); } @@ -338,5 +340,13 @@ public function it_retrieves_a_single_block() $this->assertInstanceOf(Block::class, $block); $this->assertInstanceOf(Paragraph::class, $block); + $this->assertEquals('a6f8ebe8-d5df-4ffa-b543-bcd54d1c3bad', $block->getId()); + $this->assertEquals('paragraph', $block->getType()); + $this->assertEquals('This is a paragraph test', $block->getContent()->getPlainText()); + $this->assertEquals('block', $block->getObjectType()); + + $this->assertEquals('page_id', $block->getParentType()); + $this->assertEquals('f2939732-f694-4ce2-b613-f28db6ded673', $block->getParentId()); + $this->assertTrue($block->isArchived()); } } diff --git a/tests/EndpointCommentsTest.php b/tests/EndpointCommentsTest.php new file mode 100644 index 0000000..21c84a1 --- /dev/null +++ b/tests/EndpointCommentsTest.php @@ -0,0 +1,141 @@ + Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_list_comments_403.json'), true), + 403, + ['Headers'] + ), + ]); + + $this->expectException(NotionException::class); + $this->expectExceptionMessage('Insufficient permissions for this endpoint.'); + $this->expectExceptionCode(403); + + \Notion::comments()->ofBlock('cbf6b0af-6eaa-45ca-9715-9fa147ef6b17')->list(); +}); + +it('should throw correct exception if block_id has not been found when listing comments', function () { + // not_found /v1/comments + Http::fake([ + 'https://api.notion.com/v1/comments?block_id=cbf6b0af-6eaa-45ca-9715-9fa147ef6b17*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_list_comments_404.json'), true), + 404, + ['Headers'] + ), + ]); + + $this->expectException(NotionException::class); + $this->expectExceptionMessage('Not Found'); + $this->expectExceptionCode(404); + + \Notion::comments()->ofBlock('cbf6b0af-6eaa-45ca-9715-9fa147ef6b17')->list(); +}); + +it('should fetch list of comments with an accurate representation of attributes', function () { + + // successfull /v1/comments + Http::fake([ + 'https://api.notion.com/v1/comments?block_id=abf6b0af-6eaa-45ca-9715-9fa147ef6b17*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_list_comments_200.json'), true), + 200, + ['Headers'] + ), + ]); + + $commentCollection = \Notion::comments()->ofBlock('abf6b0af-6eaa-45ca-9715-9fa147ef6b17'); + + $collection = $commentCollection->asCollection(); + $json = $commentCollection->asJson(); + + expect($commentCollection)->toBeInstanceOf(CommentCollection::class); + expect($collection)->toBeInstanceOf(\Illuminate\Support\Collection::class); + expect($json)->toBeString(); + + expect($collection->count())->toBe(1); + expect($collection->first())->toBeInstanceOf(Comment::class); + expect($collection->first()->getObjectType())->toBe('comment'); + expect($collection->first()->getId())->toBe('94cc56ab-9f02-409d-9f99-1037e9fe502f'); + expect($collection->first()->getCreatedTime())->toEqual(Carbon::parse('2022-07-15T16:52:00.000Z')->toDateTime()); + expect($collection->first()->getLastEditedTime())->toEqual(Carbon::parse('2022-07-15T19:16:00.000Z')->toDateTime()); + expect($collection->first()->getCreatedBy()->getId())->toBe('9b15170a-9941-4297-8ee6-83fa7649a87a'); + expect($collection->first()->getLastEditedBy())->toBe(null); + expect($collection->first()->getText())->toBe('Single comment'); + expect($collection->first()->getRichText()->getPlainText())->toBe('Single comment'); + expect($collection->first()->getRichText())->toBeInstanceOf(RichText::class); + expect($collection->first()->getParentId())->toBe('5c6a2821-6bb1-4a7e-b6e1-c50111515c3d'); + expect($collection->first()->getParentType())->toBe('page_id'); + expect($collection->first()->getDiscussionId())->toBe('f1407351-36f5-4c49-a13c-49f8ba11776d'); + + expect($json)->toBeJson(); +}); + +it('should throw correct exception if comment access not allowed by api when creating a comment', function () { + // not_found /v1/comments + Http::fake([ + 'https://api.notion.com/v1/comments*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_create_comment_403.json'), true), + 403, + ['Headers'] + ), + ]); + + $this->expectException(NotionException::class); + $this->expectExceptionMessage('Insufficient permissions for this endpoint.'); + $this->expectExceptionCode(403); + + \Notion::comments()->onPage('5c6a2821-6bb1-4a7e-b6e1-c50111515c3d')->create(Comment::fromText('Hello world')); +}); + +it('should throw correct exception if discussion is not found with discussion_id when creating a comment', function () { + // not_found (post) /v1/comments + Http::fake([ + 'https://api.notion.com/v1/comments*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_create_comment_404.json'), true), + 404, + ['Headers'] + ), + ]); + + $this->expectException(NotionException::class); + $this->expectExceptionMessage('Could not find discussion with ID: 141216d8-bbc5-4c24-9d37-3c45d3bc15cc.'); + $this->expectExceptionCode(404); + + \Notion::comments()->onDiscussion('141216d8-bbc5-4c24-9d37-3c45d3bc15cc')->create(Comment::fromText('Hello world')); +}); + +it('successfully creates a comment within a page', function () { + + // successfull (post) /v1/comments + Http::fake([ + 'https://api.notion.com/v1/comments*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/comments/response_create_comment_200.json'), true), + 200, + ['Headers'] + ), + ]); + + $comment = \Notion::comments()->onPage('5c6a2821-6bb1-4a7e-b6e1-c50111515c3d')->create(Comment::fromText('Hello world')); + + expect($comment)->toBeInstanceOf(Comment::class); + expect($comment->getObjectType())->toBe('comment'); + expect($comment->getId())->toBe('b52b8ed6-e029-4707-a671-832549c09de3'); + expect($comment->getCreatedTime())->toEqual(Carbon::parse('2022-07-15T20:53:00.000Z')->toDateTime()); + expect($comment->getLastEditedTime())->toEqual(Carbon::parse('2022-07-15T20:53:00.000Z')->toDateTime()); + expect($comment->getCreatedBy()->getId())->toBe('067dee40-6ebd-496f-b446-093c715fb5ec'); + expect($comment->getText())->toBe('Hello world'); + expect($comment->getRichText()->getPlainText())->toBe('Hello world'); + expect($comment->getRichText())->toBeInstanceOf(RichText::class); + expect($comment->getParentId())->toBe('5c6a2821-6bb1-4a7e-b6e1-c50111515c3d'); + expect($comment->getParentType())->toBe('page_id'); + expect($comment->getDiscussionId())->toBe('f1407351-36f5-4c49-a13c-49f8ba11776d'); +}); diff --git a/tests/EndpointDatabaseTest.php b/tests/EndpointDatabaseTest.php index f7e9364..227bf4d 100644 --- a/tests/EndpointDatabaseTest.php +++ b/tests/EndpointDatabaseTest.php @@ -1,17 +1,17 @@ assertInstanceOf(Database::class, $endpoint); - } - - /** - * @dataProvider limitProvider - */ - public function limitProvider(): array - { - return [ - [1], - [2], - ]; - } - - /** - * @test - * @dataProvider limitProvider - * - * @param $limit - */ - public function it_queries_a_database_with_filter_and_sorting_and_processes_result($limit) - { - // success /v1/databases/DATABASE_DOES_EXIST/query - Http::fake([ - 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( - json_decode(file_get_contents("tests/stubs/endpoints/databases/response_query_limit{$limit}_200.json"), true), +it('returns a database endpoint instance', function () { + +// TODO update for new Filter behaviour + $endpoint = Notion::database('897e5a76ae524b489fdfe71f5945d1af'); + + $this->assertInstanceOf(Database::class, $endpoint); +}); + +it('allows a filter, filter bag or collection of filters inside the filterBy method', function () { + $filter = Filter::textFilter('Name', Operators::CONTAINS, 'Grace'); + $filterCollection = (new Collection)->add($filter); + $filterBag = (new FilterBag(Operators::AND))->addFilter($filter); + + $endpoint = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc'); + + $endpoint->filterBy($filter); + $endpoint->filterBy($filterCollection); + $endpoint->filterBy($filterBag); + + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('The filter bag must only contain filter objects.'); + + $filterCollection->add(1); + $endpoint->filterBy($filterCollection); +}); + +it('queries a database with filter and sorting and processes result', function ($limit) { + // success /v1/databases/DATABASE_DOES_EXIST/query + Http::fake([ + 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( + json_decode(file_get_contents("tests/stubs/endpoints/databases/response_query_limit{$limit}_200.json"), true), + 200, + ['Headers'] + ), + ]); + + // Let's search for women developing the UNIVAC I computer + // and sort them by birth year descending + $sortings = new Collection(); + $filters = new Collection(); + + $sortings->add( + Sorting::propertySort('Birth year', 'descending') + ); + + $filter = Filter::rawFilter( + 'Known for', + [ + 'multi_select' => ['contains' => 'UNIVAC'], + ] + ); + + $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') + ->filterBy($filter) + ->sortBy($sortings) + ->limit($limit) + ->query(); + + $this->assertInstanceOf(PageCollection::class, $result); + + $resultCollection = $result->asCollection(); + + $this->assertIsIterable($resultCollection); + $this->assertCount($limit, $resultCollection); + $this->assertContainsOnly(Page::class, $resultCollection); + + // check page object + $page = $resultCollection->first(); + $this->assertEquals('Betty Holberton', $page->getTitle()); +}) + ->with([ + [1], + [2], + ]); + +it('queries a database with filter and sorting and has empty result', function () { + // success /v1/databases/DATABASE_DOES_EXIST/query + Http::fake([ + 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_no_result_200.json'), true), + 200, + ['Headers'] + ), + ]); + + // Let's search for something that doesn't exist + $filters = new Collection(); + + $filter = Filter::rawFilter( + 'Known for', + [ + 'multi_select' => ['contains' => "something that doesn't exists"], + ] + ); + + $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') + ->filterBy($filter) + ->query(); + + $this->assertInstanceOf(PageCollection::class, $result); + + $resultCollection = $result->asCollection(); + + $this->assertIsIterable($resultCollection); + $this->assertCount(0, $resultCollection); +}); + +it('throws a notion exception for a bad request', function () { + + // failing /v1/databases + Http::fake([ + 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( + json_decode('{}', true), + 400, + ['Headers'] + ), + ]); + + $this->expectException(NotionException::class); + $this->expectExceptionMessage('Bad Request'); + $this->expectExceptionCode(400); + Notion::database('8284f3ff77e24d4a939d19459e4d6bdc')->query(); +}); + +it('queries a database with and without offset and processes result', function () { + // success /v1/databases/DATABASE_DOES_EXIST/query + Http::fake([ + 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::sequence() + ->push( + json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_offset_start_200.json'), true), 200, ['Headers'] - ), - ]); - - // Let's search for women developing the UNIVAC I computer - // and sort them by birth year descending - $sortings = new Collection(); - $filters = new Collection(); - - $sortings->add( - Sorting::propertySort('Birth year', 'descending') - ); - - $filters - ->add( - Filter::rawFilter( - 'Known for', - [ - 'multi_select' => ['contains' => 'UNIVAC'], - ] - ) - ); - - $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') - ->filterBy($filters) - ->sortBy($sortings) - ->limit($limit) - ->query(); - - $this->assertInstanceOf(PageCollection::class, $result); - - $resultCollection = $result->asCollection(); - - $this->assertIsIterable($resultCollection); - $this->assertCount($limit, $resultCollection); - $this->assertContainsOnly(Page::class, $resultCollection); - - // check page object - $page = $resultCollection->first(); - $this->assertEquals('Betty Holberton', $page->getTitle()); - } - - /** @test */ - public function it_queries_a_database_with_filter_and_sorting_and_has_empty_result() - { - // success /v1/databases/DATABASE_DOES_EXIST/query - Http::fake([ - 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( - json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_no_result_200.json'), true), + ) + ->push( + json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_offset_end_200.json'), true), 200, ['Headers'] ), - ]); - - // Let's search for something that doesn't exists - $filters = new Collection(); - - $filters - ->add( - Filter::rawFilter( - 'Known for', - [ - 'multi_select' => ['contains' => "something that doesn't exists"], - ] - ) - ); - - $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') - ->filterBy($filters) - ->query(); - - $this->assertInstanceOf(PageCollection::class, $result); - - $resultCollection = $result->asCollection(); - - $this->assertIsIterable($resultCollection); - $this->assertCount(0, $resultCollection); - } - - /** @test */ - public function it_throws_a_notion_exception_bad_request() - { - // failing /v1/databases - Http::fake([ - 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::response( - json_decode('{}', true), - 400, - ['Headers'] - ), - ]); - - $this->expectException(NotionException::class); - $this->expectExceptionMessage('Bad Request'); - - Notion::database('8284f3ff77e24d4a939d19459e4d6bdc')->query(); - } - - /** @test */ - public function it_queries_a_database_with_and_without_offset_and_processes_result() - { - // success /v1/databases/DATABASE_DOES_EXIST/query - Http::fake([ - 'https://api.notion.com/v1/databases/8284f3ff77e24d4a939d19459e4d6bdc/query*' => Http::sequence() - ->push( - json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_offset_start_200.json'), true), - 200, - ['Headers'] - ) - ->push( - json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_offset_end_200.json'), true), - 200, - ['Headers'] - ), - ]); - - $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') - ->query(); - - //check instance and offset - $this->assertInstanceOf(PageCollection::class, $result); - $this->assertEquals(true, $result->hasMoreEntries()); - $this->assertInstanceOf(StartCursor::class, $result->nextCursor()); - $this->assertEquals('1500b7c7-329f-4854-8912-4c6972a8743e', $result->nextCursor()); - $this->assertEquals('1500b7c7-329f-4854-8912-4c6972a8743e', $result->getRawNextCursor()); - - $resultCollection = $result->asCollection(); - - $this->assertIsIterable($resultCollection); - $this->assertContainsOnly(Page::class, $resultCollection); - - // check page object - $page = $resultCollection->first(); - $this->assertEquals('Betty Holberton', $page->getTitle()); - - $resultWithOffset = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') - ->offsetByResponse($result) - ->query(); - - // check instance and offset - $this->assertInstanceOf(PageCollection::class, $resultWithOffset); - $this->assertEquals(false, $resultWithOffset->hasMoreEntries()); - $this->assertEquals(null, $resultWithOffset->nextCursor()); - $this->assertEquals(null, $resultWithOffset->getRawNextCursor()); - - $resultWithOffsetCollection = $resultWithOffset->asCollection(); - - $this->assertIsIterable($resultWithOffsetCollection); - $this->assertContainsOnly(Page::class, $resultWithOffsetCollection); - - // check page object - $page = $resultWithOffsetCollection->first(); - $this->assertEquals('Betty Holberton', $page->getTitle()); - } - - /** - * @test - * ! edge-case - */ - public function it_queries_a_database_with_a_rollup_property_with_empty_selects() - { - // success /v1/databases/DATABASE_DOES_EXIST/query - Http::fake([ - 'https://api.notion.com/v1/databases/11971214ce574df7a58389c1deda61d7/query*' => Http::response( - json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_rollup_empty_select_200.json'), true), - 200, - ['Headers'] - ), - ]); + ]); + + $result = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') + ->query(); + + //check instance and offset + $this->assertInstanceOf(PageCollection::class, $result); + $this->assertEquals(true, $result->hasMoreEntries()); + $this->assertInstanceOf(StartCursor::class, $result->nextCursor()); + $this->assertEquals('1500b7c7-329f-4854-8912-4c6972a8743e', $result->nextCursor()); + $this->assertEquals('1500b7c7-329f-4854-8912-4c6972a8743e', $result->getRawNextCursor()); + + $resultCollection = $result->asCollection(); + + $this->assertIsIterable($resultCollection); + $this->assertContainsOnly(Page::class, $resultCollection); + + // check page object + $page = $resultCollection->first(); + $this->assertEquals('Betty Holberton', $page->getTitle()); + + $resultWithOffset = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') + ->offsetByResponse($result) + ->query(); + + // check instance and offset + $this->assertInstanceOf(PageCollection::class, $resultWithOffset); + $this->assertEquals(false, $resultWithOffset->hasMoreEntries()); + $this->assertEquals(null, $resultWithOffset->nextCursor()); + $this->assertEquals(null, $resultWithOffset->getRawNextCursor()); + + $resultWithOffsetCollection = $resultWithOffset->asCollection(); + + $this->assertIsIterable($resultWithOffsetCollection); + $this->assertContainsOnly(Page::class, $resultWithOffsetCollection); + + // check page object + $page = $resultWithOffsetCollection->first(); + $this->assertEquals('Betty Holberton', $page->getTitle()); +}); + +it('queries a database with a rollup property with empty selects', function () { + // success /v1/databases/DATABASE_DOES_EXIST/query + Http::fake([ + 'https://api.notion.com/v1/databases/11971214ce574df7a58389c1deda61d7/query*' => Http::response( + json_decode(file_get_contents('tests/stubs/endpoints/databases/response_query_rollup_empty_select_200.json'), true), + 200, + ['Headers'] + ), + ]); - $result = Notion::database('11971214ce574df7a58389c1deda61d7')->query(); + $result = Notion::database('11971214ce574df7a58389c1deda61d7')->query(); - $this->assertInstanceOf(PageCollection::class, $result); + $this->assertInstanceOf(PageCollection::class, $result); - $resultCollection = $result->asCollection(); + $resultCollection = $result->asCollection(); - $this->assertIsIterable($resultCollection); - $this->assertContainsOnly(Page::class, $resultCollection); + $this->assertIsIterable($resultCollection); + $this->assertContainsOnly(Page::class, $resultCollection); - // check page object - $page = $resultCollection->first(); - $this->assertEquals(0, $page->getProperty('Rollup')->getContent()->count()); - } -} + // check page object + $page = $resultCollection->first(); + $this->assertEquals(0, $page->getProperty('Rollup')->getContent()->count()); +}); diff --git a/tests/EndpointDatabasesTest.php b/tests/EndpointDatabasesTest.php index 12502e0..42f3891 100644 --- a/tests/EndpointDatabasesTest.php +++ b/tests/EndpointDatabasesTest.php @@ -4,6 +4,7 @@ use Carbon\Carbon; use FiveamCode\LaravelNotionApi\Entities\Database; +use FiveamCode\LaravelNotionApi\Entities\PropertyItems\RichText; use FiveamCode\LaravelNotionApi\Exceptions\NotionException; use Illuminate\Support\Facades\Http; use Notion; @@ -90,13 +91,23 @@ public function it_returns_database_entity_with_filled_properties() // check properties $this->assertSame('Grocery List', $databaseResult->getTitle()); + $this->assertSame('Grocery List Description', $databaseResult->getDescription()); $this->assertSame('database', $databaseResult->getObjectType()); - - $this->assertCount(1, $databaseResult->getRawTitle()); + $this->assertSame('668d797c-76fa-4934-9b05-ad288df2d136', $databaseResult->getId()); + $this->assertTrue($databaseResult->isInline()); + $this->assertTrue($databaseResult->isArchived()); + + $this->assertInstanceOf(RichText::class, $databaseResult->getRichTitle()); + $this->assertInstanceOf(RichText::class, $databaseResult->getRichDescription()); + $this->assertCount(1, $databaseResult->getRichTitle()->getRawResponse()); + $this->assertCount(1, $databaseResult->getRichDescription()->getRawResponse()); $this->assertCount(12, $databaseResult->getRawProperties()); $this->assertInstanceOf(Carbon::class, $databaseResult->getCreatedTime()); $this->assertInstanceOf(Carbon::class, $databaseResult->getLastEditedTime()); + + $this->assertEquals('page_id', $databaseResult->getParentType()); + $this->assertEquals('f2939732-f694-4ce2-b613-f28db6ded673', $databaseResult->getParentId()); } /** @test */ diff --git a/tests/EndpointPagesTest.php b/tests/EndpointPagesTest.php index cd33a19..f8608b2 100644 --- a/tests/EndpointPagesTest.php +++ b/tests/EndpointPagesTest.php @@ -46,6 +46,7 @@ public function it_throws_a_notion_exception_bad_request() $this->expectException(NotionException::class); $this->expectExceptionMessage('Bad Request'); + $this->expectExceptionCode(400); Notion::pages()->find('afd5f6fb-1cbd-41d1-a108-a22ae0d9bac8'); } @@ -72,6 +73,9 @@ public function it_returns_page_entity_with_filled_properties() $this->assertCount(9, $pageResult->getRawProperties()); $this->assertCount(9, $pageResult->getProperties()); $this->assertCount(9, $pageResult->getPropertyKeys()); + $this->assertSame('database_id', $pageResult->getParentType()); + $this->assertSame('f2939732-f694-4ce2-b613-f28db6ded673', $pageResult->getParentId()); + $this->assertTrue($pageResult->isArchived()); // check date and datetime properties $this->assertTrue($pageResult->getProperty('DateWithTime')->hasTime()); @@ -95,6 +99,7 @@ public function it_throws_a_notion_exception_not_found() $this->expectException(NotionException::class); $this->expectExceptionMessage('Not found'); + $this->expectExceptionCode(404); Notion::pages()->find('b55c9c91-384d-452b-81db-d1ef79372b79'); } diff --git a/tests/EndpointSearchTest.php b/tests/EndpointSearchTest.php index 53c943c..b404231 100644 --- a/tests/EndpointSearchTest.php +++ b/tests/EndpointSearchTest.php @@ -32,6 +32,7 @@ public function it_throws_a_notion_exception_bad_request() $this->expectException(NotionException::class); $this->expectExceptionMessage('Bad Request'); + $this->expectExceptionCode(400); Notion::search()->query(); } diff --git a/tests/EndpointUsersTest.php b/tests/EndpointUsersTest.php index ee81df9..25e56c1 100644 --- a/tests/EndpointUsersTest.php +++ b/tests/EndpointUsersTest.php @@ -31,6 +31,7 @@ public function it_throws_a_notion_exception_bad_request() $this->expectException(NotionException::class); $this->expectExceptionMessage('Bad Request'); + $this->expectExceptionCode(400); Notion::users()->all(); } @@ -79,6 +80,7 @@ public function it_returns_a_specific_user_as_entity_object() $this->assertInstanceOf(User::class, $user); $this->assertEquals('Avocado Lovelace', $user->getName()); + $this->assertEquals('user', $user->getObjectType()); $this->assertEquals('https://secure.notion-static.com/e6a352a8-8381-44d0-a1dc-9ed80e62b53d.jpg', $user->getAvatarUrl()); } @@ -96,6 +98,7 @@ public function it_throws_a_notion_exception_not_found() $this->expectException(NotionException::class); $this->expectExceptionMessage('Not found'); + $this->expectExceptionCode(404); Notion::users()->find('d40e767c-d7af-4b18-a86d-55c61f1e39a1'); } diff --git a/tests/FilterBagTest.php b/tests/FilterBagTest.php new file mode 100644 index 0000000..7fc6d57 --- /dev/null +++ b/tests/FilterBagTest.php @@ -0,0 +1,210 @@ +assertInstanceOf(FilterBag::class, $filterBag); + + $queryFilter = $filterBag->toQuery(); + + $this->assertArrayHasKey('or', $queryFilter); +}); + +it('creates a FilterBag with an "and" operator with the instance method', function () { + $filterBag = FilterBag::and(); + + $this->assertInstanceOf(FilterBag::class, $filterBag); + + $queryFilter = $filterBag->toQuery(); + + $this->assertArrayHasKey('and', $queryFilter); +}); + +it('throws an exception when providing an invalid operator', function () { + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('Invalid operator for FilterBag: invalid'); + + new FilterBag('invalid'); +}); + +it('only allows the nesting of FilterBags up to two levels', function () { + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('The maximum nesting level of compound filters must not exceed 2.'); + + $filterBag = new FilterBag('and'); + + $filterBag->addFilter( + Filter::rawFilter('Known for', [ + 'multi_select' => ['contains' => 'UNIVAC'], + ]) + ); + + $nameFilterBag = new FilterBag('or'); + $nameFilterBag + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace')) + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean')); + + $anotherBag = new FilterBag(); + $nameFilterBag->addFilterBag($anotherBag); + + $filterBag->addFilterBag($nameFilterBag); +}); + +it('creates a filter bag with the AND operator and two conditions', function () { + $filterBag = new FilterBag(Operators::AND); + + // Filter for all entries that are + // (Known for == UNIVAC && Known for == ENIAC) + + $filterBag->addFilter( + Filter::rawFilter('Known for', [ + 'multi_select' => ['contains' => 'UNIVAC'], + ]) + ); + + $filterBag->addFilter( + Filter::rawFilter('Known for', [ + 'multi_select' => ['contains' => 'ENIAC'], + ]) + ); + + $filterBagQuery = $filterBag->toQuery(); + $this->assertArrayHasKey(Operators::AND, $filterBagQuery); + $this->assertCount(2, $filterBagQuery[Operators::AND]); + + // check structure of first filter compound + $filterQuery = $filterBagQuery[Operators::AND][0]; + $this->assertArrayHasKey('property', $filterQuery); + $this->assertEquals('Known for', $filterQuery['property']); + $this->assertArrayHasKey('multi_select', $filterQuery); + $this->assertArrayHasKey('contains', $filterQuery['multi_select']); + $this->assertEquals('UNIVAC', $filterQuery['multi_select']['contains']); + + // check structure of second filter compound + $filterQuery = $filterBagQuery[Operators::AND][1]; + $this->assertArrayHasKey('property', $filterQuery); + $this->assertEquals('Known for', $filterQuery['property']); + $this->assertArrayHasKey('multi_select', $filterQuery); + $this->assertArrayHasKey('contains', $filterQuery['multi_select']); + $this->assertEquals('ENIAC', $filterQuery['multi_select']['contains']); +}); + +it('creates a filter bag with the OR operator and three conditions', function () { + $filterBag = new FilterBag(Operators::OR); + + // Filter for all entries that have + // (Name == Grace || Name == Jean || Name == Ada) + + $filterBag + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace')) + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean')) + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Ada')); + + $filterBagQuery = $filterBag->toQuery(); + + $this->assertArrayHasKey(Operators::OR, $filterBagQuery); + $this->assertCount(3, $filterBagQuery[Operators::OR]); + + // check structure of first filter compound + $filterQuery = $filterBagQuery[Operators::OR][0]; + $this->assertArrayHasKey('property', $filterQuery); + $this->assertEquals('Name', $filterQuery['property']); + $this->assertArrayHasKey('text', $filterQuery); + $this->assertArrayHasKey('contains', $filterQuery['text']); + $this->assertEquals('Grace', $filterQuery['text']['contains']); + + // check value of second filter compound + $filterQuery = $filterBagQuery[Operators::OR][1]; + $this->assertEquals('Jean', $filterQuery['text']['contains']); + + // check value of third filter compound + $filterQuery = $filterBagQuery[Operators::OR][2]; + $this->assertEquals('Ada', $filterQuery['text']['contains']); +}); + +it('creates a filter bag with with the AND operator and a nested OR condition', function () { + + // Filter for all entries that are + // (KnownFor == Univac && (Name == Grace || Name == Jean)) + + $filterBag = new FilterBag(Operators::AND); + + $filterBag->addFilter( + Filter::rawFilter('Known for', [ + 'multi_select' => ['contains' => 'UNIVAC'], + ]) + ); + + $nameFilterBag = new FilterBag(Operators::OR); + $nameFilterBag + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace')) + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean')); + + $filterBag->addFilterBag($nameFilterBag); + + $this->assertInstanceOf(FilterBag::class, $filterBag); + $this->assertInstanceOf(FilterBag::class, $nameFilterBag); + + $filterBagQuery = $filterBag->toQuery(); + + $this->assertArrayHasKey(Operators::AND, $filterBagQuery); + + // check structure of first AND filter component + $multiSelectFilterQuery = $filterBagQuery[Operators::AND][0]; + $this->assertArrayHasKey('property', $multiSelectFilterQuery); + $this->assertEquals('Known for', $multiSelectFilterQuery['property']); + $this->assertArrayHasKey('multi_select', $multiSelectFilterQuery); + $this->assertArrayHasKey('contains', $multiSelectFilterQuery['multi_select']); + $this->assertEquals('UNIVAC', $multiSelectFilterQuery['multi_select']['contains']); + + // check structure of second AND filter component, which is another filter bag + // with an OR operator + $nameFilterBagQuery = $filterBagQuery[Operators::AND][1]; + $this->assertArrayHasKey(Operators::OR, $nameFilterBagQuery); + $this->assertCount(2, $nameFilterBagQuery[Operators::OR]); + + // check structure of the first filter inside the OR filter bag + $filterQuery = $nameFilterBagQuery[Operators::OR][0]; + $this->assertArrayHasKey('property', $filterQuery); + $this->assertEquals('Name', $filterQuery['property']); + $this->assertArrayHasKey('text', $filterQuery); + $this->assertArrayHasKey('contains', $filterQuery['text']); + $this->assertEquals('Grace', $filterQuery['text']['contains']); + + // check structure of the second filter inside the OR filter bag + $filterQuery = $nameFilterBagQuery[Operators::OR][1]; + $this->assertArrayHasKey('property', $filterQuery); + $this->assertEquals('Name', $filterQuery['property']); + $this->assertArrayHasKey('text', $filterQuery); + $this->assertArrayHasKey('contains', $filterQuery['text']); + $this->assertEquals('Jean', $filterQuery['text']['contains']); +}); + +it('throws an exception for nesting too many filter bags', function () { + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('The maximum nesting level of compound filters must not exceed 2.'); + + $filterBag = new FilterBag(Operators::AND); + + $filterBag->addFilter( + Filter::rawFilter('Known for', [ + 'multi_select' => ['contains' => 'UNIVAC'], + ]) + ); + + $nameFilterBag = new FilterBag(Operators::OR); + $nameFilterBag + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Grace')) + ->addFilter(Filter::textFilter('Name', Operators::CONTAINS, 'Jean')); + + $anotherBag = new FilterBag(); + $nameFilterBag->addFilterBag($anotherBag); + + // that's one nested bag too much + $filterBag->addFilterBag($nameFilterBag); +}); diff --git a/tests/FilterTest.php b/tests/FilterTest.php index f4e2a9a..23cef34 100644 --- a/tests/FilterTest.php +++ b/tests/FilterTest.php @@ -1,57 +1,61 @@ assertInstanceOf(Filter::class, $filter); - $this->assertArrayHasKey('property', $filter->toQuery()); - $this->assertEquals('Name', $filter->toQuery()['property']); - $this->assertArrayHasKey('text', $filter->toQuery()); - $this->assertArrayHasKey('equals', $filter->toQuery()['text']); - $this->assertEquals('Ada Lovelace', $filter->toQuery()['text']['equals']); - } - - /** @test */ - public function it_creates_a_number_filter_with_the_given_data() - { - $filter = Filter::numberFilter('Awesomeness Level', Operators::GREATER_THAN_OR_EQUAL_TO, 9000); - - $this->assertInstanceOf(Filter::class, $filter); - $this->assertArrayHasKey('property', $filter->toQuery()); - $this->assertEquals('Awesomeness Level', $filter->toQuery()['property']); - $this->assertArrayHasKey('number', $filter->toQuery()); - $this->assertArrayHasKey('greater_than_or_equal_to', $filter->toQuery()['number']); - $this->assertEquals('9000', $filter->toQuery()['number']['greater_than_or_equal_to']); - } - - /** @test */ - public function it_throws_an_exception_for_an_invalid_comparison_operator() - { - $this->expectException(HandlingException::class); - $this->expectExceptionMessage('Invalid comparison operator'); - $filter = Filter::numberFilter('Awesomeness Level', 'non_existing_operator', 9000); - } - - /** @test */ - public function it_throws_an_exception_for_an_invalid_filter_definition() - { - $filter = new Filter('Test'); - - $this->expectException(HandlingException::class); - $this->expectExceptionMessage('Invalid filter definition.'); - $filter->toArray(); - } -} +use Illuminate\Support\Collection; + +it('creates a text filter with the given data', function () { + $filter = Filter::textFilter('Name', Operators::EQUALS, 'Ada Lovelace'); + + $this->assertInstanceOf(Filter::class, $filter); + $this->assertArrayHasKey('property', $filter->toQuery()); + $this->assertEquals('Name', $filter->toQuery()['property']); + $this->assertArrayHasKey('text', $filter->toQuery()); + $this->assertArrayHasKey('equals', $filter->toQuery()['text']); + $this->assertEquals('Ada Lovelace', $filter->toQuery()['text']['equals']); // +}); + +it('creates a number filter with the given data', function () { + $filter = Filter::numberFilter('Awesomeness Level', Operators::GREATER_THAN_OR_EQUAL_TO, 9000); + + $this->assertInstanceOf(Filter::class, $filter); + $this->assertArrayHasKey('property', $filter->toQuery()); + $this->assertEquals('Awesomeness Level', $filter->toQuery()['property']); + $this->assertArrayHasKey('number', $filter->toQuery()); + $this->assertArrayHasKey('greater_than_or_equal_to', $filter->toQuery()['number']); + $this->assertEquals('9000', $filter->toQuery()['number']['greater_than_or_equal_to']); +}); + +it('throws an HandlingException for an invalid comparison operator', function () { + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('Invalid comparison operator'); + $filter = Filter::numberFilter('Awesomeness Level', 'non_existing_operator', 9000); +}); + +it('throws an exception for an invalid filter definition', function () { + $filter = new Filter('Test'); + + $this->expectException(HandlingException::class); + $this->expectExceptionMessage('Invalid filter definition.'); + $filter->toArray(); +}); + +it('converts a collection of filters to a filter bag with an OR operator', function () { + $filter = Filter::textFilter('Name', Operators::CONTAINS, 'Grace'); + $filterCollection = (new Collection())->add($filter); + + $endpoint = Notion::database('8284f3ff77e24d4a939d19459e4d6bdc'); + + $endpoint->filterBy($filterCollection); + + $queryData = $endpoint->getPostData(); + + $this->assertArrayHasKey('filter', $queryData); + $this->assertArrayHasKey('or', $queryData['filter']); + $this->assertArrayHasKey('property', $queryData['filter']['or'][0]); + $this->assertEquals('Name', $queryData['filter']['or'][0]['property']); + $this->assertArrayHasKey('text', $queryData['filter']['or'][0]); + $this->assertArrayHasKey('contains', $queryData['filter']['or'][0]['text']); + $this->assertEquals('Grace', $queryData['filter']['or'][0]['text']['contains']); +}); diff --git a/tests/NotionApiTest.php b/tests/NotionApiTest.php index 7e0b738..f98c39c 100644 --- a/tests/NotionApiTest.php +++ b/tests/NotionApiTest.php @@ -2,19 +2,11 @@ namespace FiveamCode\LaravelNotionApi\Tests; -use FiveamCode\LaravelNotionApi\Notion; use FiveamCode\LaravelNotionApi\NotionFacade; use Illuminate\Support\Collection; -use Orchestra\Testbench\TestCase; +use Orchestra\Testbench\TestCase as Orchestra; -/** - * Class EndpointPageTest. - * - * The fake API responses are based on our test environment (since the current Notion examples do not match with the actual calls). - * - * @see https://developers.notion.com/reference/get-page - */ -class NotionApiTest extends TestCase +class NotionApiTest extends Orchestra { /** * @param \Illuminate\Foundation\Application $app @@ -50,10 +42,4 @@ protected function assertContainsInstanceOf(string $class, $haystack): bool return false; } - - /** @test */ - public function it_asserts_true() - { - $this->assertTrue(true); - } } diff --git a/tests/NotionExceptionTest.php b/tests/NotionExceptionTest.php index 98c5f22..53438f4 100644 --- a/tests/NotionExceptionTest.php +++ b/tests/NotionExceptionTest.php @@ -23,6 +23,7 @@ public function it_throws_a_notion_exception_with_detailed_message_from_response $this->expectException(NotionException::class); $this->expectExceptionMessage('Bad Request: (validation_error) (path failed validation: path.id should be a valid uuid, instead was'); + $this->expectExceptionCode(400); \Notion::block('d092140ce4e549bf9915fb8ad43d1699d')->children()->asCollection(); } diff --git a/tests/PagePropertyTest.php b/tests/PagePropertyTest.php index bf02ace..739dbf2 100644 --- a/tests/PagePropertyTest.php +++ b/tests/PagePropertyTest.php @@ -99,6 +99,7 @@ public function it_checks_if_specific_page_property_is_a_valid_text_property() $this->assertSame('text', $text->getType()); $this->assertSame('|Zt@', $text->getId()); $this->assertSame('this is a nice Text :-)', $text->getPlainText()); + $this->assertSame('this is a nice Text :-)', $text->asText()); $this->assertInstanceOf(RichText::class, $text->getRichText()); $this->assertInstanceOf(RichText::class, $text->getContent()); $this->assertSame('this is a nice Text :-)', $text->getRichText()->getPlainText()); @@ -149,6 +150,7 @@ public function it_checks_if_specific_page_property_is_a_valid_title_property() $this->assertSame('title', $title->getType()); $this->assertSame('title', $title->getId()); $this->assertSame('Notion Is Awesome', $title->getPlainText()); + $this->assertSame('Notion Is Awesome', $title->asText()); $this->assertInstanceOf(RichText::class, $title->getContent()); $this->assertSame('Notion Is Awesome', $title->getContent()->getPlainText()); } diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..047ff43 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,5 @@ +in(__DIR__); diff --git a/tests/SortingTest.php b/tests/SortingTest.php new file mode 100644 index 0000000..410c181 --- /dev/null +++ b/tests/SortingTest.php @@ -0,0 +1,30 @@ +assertEquals($expectedSortQuery, json_encode(Sorting::sortQuery($sortBy))); +}); + +it('can sort by multiple properties', function () { + $expectedSortQuery = '[{"timestamp":"created_time","direction":"ascending"},{"property":"Birth year","direction":"ascending"}]'; + + $sortings = new Collection(); + + $sortings->add(Sorting::timestampSort('created_time', 'ascending')); + $sortings->add(Sorting::propertySort('Birth year', 'ascending')); + + $this->assertEquals($expectedSortQuery, json_encode(Sorting::sortQuery($sortings))); +}); + +it('refuses other classes than sorting or collection in the sortBy() method', function () { + $this->expectException(TypeError::class); + + Notion::database('8284f3ff77e24d4a939d19459e4d6bdc') + ->sortBy(new stdClass()) + ->query(); +}); diff --git a/tests/stubs/endpoints/blocks/response_specific_block_200.json b/tests/stubs/endpoints/blocks/response_specific_block_200.json index 1b2a15f..de5336b 100644 --- a/tests/stubs/endpoints/blocks/response_specific_block_200.json +++ b/tests/stubs/endpoints/blocks/response_specific_block_200.json @@ -4,14 +4,18 @@ "created_time": "2021-05-17T13:51:00.000Z", "last_edited_time": "2021-06-10T17:40:00.000Z", "has_children": false, - "archived": false, + "archived": true, "type": "paragraph", + "parent": { + "type": "page_id", + "page_id": "f2939732-f694-4ce2-b613-f28db6ded673" + }, "paragraph": { "text": [ { "type": "text", "text": { - "content": "C:\\xampp\\php", + "content": "This is a paragraph test", "link": null }, "annotations": { @@ -22,7 +26,7 @@ "code": false, "color": "default" }, - "plain_text": "C:\\xampp\\php", + "plain_text": "This is a paragraph test", "href": null } ] diff --git a/tests/stubs/endpoints/comments/response_create_comment_200.json b/tests/stubs/endpoints/comments/response_create_comment_200.json new file mode 100644 index 0000000..b8a0664 --- /dev/null +++ b/tests/stubs/endpoints/comments/response_create_comment_200.json @@ -0,0 +1,34 @@ +{ + "object": "comment", + "id": "b52b8ed6-e029-4707-a671-832549c09de3", + "parent": { + "type": "page_id", + "page_id": "5c6a2821-6bb1-4a7e-b6e1-c50111515c3d" + }, + "discussion_id": "f1407351-36f5-4c49-a13c-49f8ba11776d", + "created_time": "2022-07-15T20:53:00.000Z", + "last_edited_time": "2022-07-15T20:53:00.000Z", + "created_by": { + "object": "user", + "id": "067dee40-6ebd-496f-b446-093c715fb5ec" + }, + "rich_text": [ + { + "type": "text", + "text": { + "content": "Hello world", + "link": null + }, + "annotations": { + "bold": false, + "italic": false, + "strikethrough": false, + "underline": false, + "code": false, + "color": "default" + }, + "plain_text": "Hello world", + "href": null + } + ] + } \ No newline at end of file diff --git a/tests/stubs/endpoints/comments/response_create_comment_403.json b/tests/stubs/endpoints/comments/response_create_comment_403.json new file mode 100644 index 0000000..3bd4812 --- /dev/null +++ b/tests/stubs/endpoints/comments/response_create_comment_403.json @@ -0,0 +1,6 @@ +{ + "object": "error", + "status": 403, + "code": "restricted_resource", + "message": "Insufficient permissions for this endpoint." + } \ No newline at end of file diff --git a/tests/stubs/endpoints/comments/response_create_comment_404.json b/tests/stubs/endpoints/comments/response_create_comment_404.json new file mode 100644 index 0000000..47b2d39 --- /dev/null +++ b/tests/stubs/endpoints/comments/response_create_comment_404.json @@ -0,0 +1,6 @@ +{ + "object": "error", + "status": 404, + "code": "object_not_found", + "message": "Could not find discussion with ID: 141216d8-bbc5-4c24-9d37-3c45d3bc15cc. Make sure the relevant pages and databases are shared with your integration." +} \ No newline at end of file diff --git a/tests/stubs/endpoints/comments/response_list_comments_200.json b/tests/stubs/endpoints/comments/response_list_comments_200.json new file mode 100644 index 0000000..1d8b41a --- /dev/null +++ b/tests/stubs/endpoints/comments/response_list_comments_200.json @@ -0,0 +1,43 @@ +{ + "object": "list", + "results": [ + { + "object": "comment", + "id": "94cc56ab-9f02-409d-9f99-1037e9fe502f", + "parent": { + "type": "page_id", + "page_id": "5c6a2821-6bb1-4a7e-b6e1-c50111515c3d" + }, + "discussion_id": "f1407351-36f5-4c49-a13c-49f8ba11776d", + "created_time": "2022-07-15T16:52:00.000Z", + "last_edited_time": "2022-07-15T19:16:00.000Z", + "created_by": { + "object": "user", + "id": "9b15170a-9941-4297-8ee6-83fa7649a87a" + }, + "rich_text": [ + { + "type": "text", + "text": { + "content": "Single comment", + "link": null + }, + "annotations": { + "bold": false, + "italic": false, + "strikethrough": false, + "underline": false, + "code": false, + "color": "default" + }, + "plain_text": "Single comment", + "href": null + } + ] + } + ], + "next_cursor": null, + "has_more": false, + "type": "comment", + "comment": {} +} \ No newline at end of file diff --git a/tests/stubs/endpoints/comments/response_list_comments_403.json b/tests/stubs/endpoints/comments/response_list_comments_403.json new file mode 100644 index 0000000..3bd4812 --- /dev/null +++ b/tests/stubs/endpoints/comments/response_list_comments_403.json @@ -0,0 +1,6 @@ +{ + "object": "error", + "status": 403, + "code": "restricted_resource", + "message": "Insufficient permissions for this endpoint." + } \ No newline at end of file diff --git a/tests/stubs/endpoints/comments/response_list_comments_404.json b/tests/stubs/endpoints/comments/response_list_comments_404.json new file mode 100644 index 0000000..2930fe1 --- /dev/null +++ b/tests/stubs/endpoints/comments/response_list_comments_404.json @@ -0,0 +1,6 @@ +{ + "object": "error", + "status": 404, + "code": "object_not_found", + "message": "Could not find block with ID: cbf6b0af-6eaa-45ca-9715-9fa147ef6b17. Make sure the relevant pages and databases are shared with your integration." +} \ No newline at end of file diff --git a/tests/stubs/endpoints/databases/response_specific_200.json b/tests/stubs/endpoints/databases/response_specific_200.json index a900324..af8ae96 100644 --- a/tests/stubs/endpoints/databases/response_specific_200.json +++ b/tests/stubs/endpoints/databases/response_specific_200.json @@ -3,6 +3,31 @@ "id": "668d797c-76fa-4934-9b05-ad288df2d136", "created_time": "2020-03-17T19:10:04.968Z", "last_edited_time": "2020-03-17T21:49:37.913Z", + "parent": { + "type": "page_id", + "page_id": "f2939732-f694-4ce2-b613-f28db6ded673" + }, + "is_inline": true, + "archived": true, + "description": [ + { + "type": "text", + "text": { + "content": "Grocery List Description", + "link": null + }, + "annotations": { + "bold": false, + "italic": false, + "strikethrough": false, + "underline": false, + "code": false, + "color": "default" + }, + "plain_text": "Grocery List Description", + "href": null + } + ], "title": [ { "type": "text", @@ -103,29 +128,28 @@ "id": "Z\\Eh", "type": "multi_select", "multi_select": { - "options": - [ - { - "id": "d209b920-212c-4040-9d4a-bdf349dd8b2a", - "name": "Duc Loi Market", - "color": "blue" - }, - { - "id": "70104074-0f91-467b-9787-00d59e6e1e41", - "name": "Rainbow Grocery", - "color": "gray" - }, - { - "id": "e6fd4f04-894d-4fa7-8d8b-e92d08ebb604", - "name": "Nijiya Market", - "color": "purple" - }, - { - "id": "6c3867c5-d542-4f84-b6e9-a420c43094e7", - "name": "Gus's Community Market", - "color": "yellow" - } - ] + "options": [ + { + "id": "d209b920-212c-4040-9d4a-bdf349dd8b2a", + "name": "Duc Loi Market", + "color": "blue" + }, + { + "id": "70104074-0f91-467b-9787-00d59e6e1e41", + "name": "Rainbow Grocery", + "color": "gray" + }, + { + "id": "e6fd4f04-894d-4fa7-8d8b-e92d08ebb604", + "name": "Nijiya Market", + "color": "purple" + }, + { + "id": "6c3867c5-d542-4f84-b6e9-a420c43094e7", + "name": "Gus's Community Market", + "color": "yellow" + } + ] } }, "+1": { diff --git a/tests/stubs/endpoints/pages/response_specific_200.json b/tests/stubs/endpoints/pages/response_specific_200.json index 268e117..b34e012 100644 --- a/tests/stubs/endpoints/pages/response_specific_200.json +++ b/tests/stubs/endpoints/pages/response_specific_200.json @@ -7,7 +7,7 @@ "type": "database_id", "database_id": "f2939732-f694-4ce2-b613-f28db6ded673" }, - "archived": false, + "archived": true, "properties": { "NumberProp": { "id": ">d{N",