diff --git a/.gitattributes b/.gitattributes index e69de29..3e7d094 100644 --- a/.gitattributes +++ b/.gitattributes @@ -0,0 +1,16 @@ +*.php diff=php + +/.github export-ignore +/bin export-ignore +/scripts export-ignore +/tests export-ignore + +/.gitattributes export-ignore +/.gitignore export-ignore +/.php-cs-fixer.dist.php export-ignore +/.phpactor.json export-ignore +/.release-please-manifest.json export-ignore +/.stats.yml export-ignore +/phpstan.dist.neon export-ignore +/phpunit.xml.dist export-ignore +/release-please-config.json export-ignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10bcd4b..2cff8b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up PHP uses: 'shivammathur/setup-php@v2' @@ -38,7 +38,7 @@ jobs: runs-on: ${{ github.repository == 'stainless-sdks/moderation-api-php' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up PHP uses: 'shivammathur/setup-php@v2' diff --git a/.github/workflows/publish-packagist.yml b/.github/workflows/publish-packagist.yml index 335a2cc..12597f5 100644 --- a/.github/workflows/publish-packagist.yml +++ b/.github/workflows/publish-packagist.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Publish to Packagist run: |- diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index f73540e..7af163c 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -12,7 +12,7 @@ jobs: if: github.repository == 'moderation-api/sdk-php' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check release environment run: | diff --git a/.gitignore b/.gitignore index 6739884..71d6d15 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -composer.lock docs/ .idea/ .php-cs-fixer.cache @@ -9,3 +8,6 @@ playground/ *.swo *.swp vendor/ + +# do not edit! excludes generated files used internally +.artifacts/ diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index a2b062b..e01ea3b 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -4,7 +4,7 @@ use PhpCsFixer\Finder; use PhpCsFixer\Runner\Parallel\ParallelConfigFactory; -return (new Config()) +return (new Config) ->setParallelConfig(ParallelConfigFactory::detect()) ->setFinder(Finder::create()->in([__DIR__.'/src', __DIR__.'/tests'])) ->setRules([ diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 6b7b74c..da59f99 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.3.0" + ".": "0.4.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index e7f91f4..b7f9ccf 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 27 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api%2Fmoderation-api-3eaa6a0657e9f67ea196c65d3b604c71f5406108983981ec696642563fda0a93.yml -openapi_spec_hash: c417a44bb9fa62a02eca68bbb307c712 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api%2Fmoderation-api-d63cb4b89d39d82fa1d4600501ad5cedfddfbcf7a8806cac61634873b5211a9f.yml +openapi_spec_hash: 5a8d51e52ea8e52681c77eed584fb21c config_hash: 6a52f6ae7d55cf3b4e91538cc7752aeb diff --git a/CHANGELOG.md b/CHANGELOG.md index 633c83e..c5dd414 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,56 @@ # Changelog +## 0.4.0 (2026-01-31) + +Full Changelog: [v0.3.0...v0.4.0](https://github.com/moderation-api/sdk-php/compare/v0.3.0...v0.4.0) + +### ⚠ BREAKING CHANGES + +* replace special flag type `omittable` with just `null` +* use aliases for phpstan types +* improve identifier renaming for names that clash with builtins + +### Features + +* add idempotency header support ([4b941bd](https://github.com/moderation-api/sdk-php/commit/4b941bd0c16b8fe812da9ad660d49a4cb24e936d)) +* **api:** api update ([4e4f842](https://github.com/moderation-api/sdk-php/commit/4e4f8424fce03d262c50b50b060b8103c41f4d0e)) +* **api:** api update ([859828f](https://github.com/moderation-api/sdk-php/commit/859828f8d807016ae945da409a699e399236640c)) +* **api:** api update ([c7142a7](https://github.com/moderation-api/sdk-php/commit/c7142a7b0a048a20c420d935420f9108b7546088)) +* improve identifier renaming for names that clash with builtins ([8028859](https://github.com/moderation-api/sdk-php/commit/8028859af7460243fc4c23f2e2541ff65ba542d6)) +* improved phpstan type annotations ([1e1c3c6](https://github.com/moderation-api/sdk-php/commit/1e1c3c6816b004ce6126a7d757a2c8c4cbf4c40f)) +* replace special flag type `omittable` with just `null` ([5294f9f](https://github.com/moderation-api/sdk-php/commit/5294f9fe1ceeb4443c20c709a6a6e1e7e269d53b)) +* simplify and make the phpstan types more consistent ([0735967](https://github.com/moderation-api/sdk-php/commit/07359676f9a4e714a1ea6e06cbd39a03563f7980)) +* support unwrapping envelopes ([50fbe5d](https://github.com/moderation-api/sdk-php/commit/50fbe5dfebbe02573f73df5c190512a0e566784d)) +* use aliases for phpstan types ([e17e879](https://github.com/moderation-api/sdk-php/commit/e17e879f4fd01c07356de5ed18f2021ad9e5e426)) + + +### Bug Fixes + +* a number of serialization errors ([4a43323](https://github.com/moderation-api/sdk-php/commit/4a4332385de4fd74a5b6d6499fc915d6ad3b5ade)) +* correctly serialize dates ([8b350ba](https://github.com/moderation-api/sdk-php/commit/8b350ba2b06ecf19174392a8b9b8bcc0b1a500c0)) +* support arrays in query param construction ([032b424](https://github.com/moderation-api/sdk-php/commit/032b424bd40e42f0ec67191d1c5a067d1dd84e2b)) +* typos in README.md ([edeefaf](https://github.com/moderation-api/sdk-php/commit/edeefaf7b79b4104fd9e8eacf93095720b840533)) + + +### Chores + +* add git attributes and composer lock file ([0ec3ea1](https://github.com/moderation-api/sdk-php/commit/0ec3ea12cfcb0f72172bb144d3adae63a6dd2082)) +* **internal:** add a basic client test ([36b8433](https://github.com/moderation-api/sdk-php/commit/36b8433b78f6f885049c83049a60add2368bb04d)) +* **internal:** codegen related update ([d600edc](https://github.com/moderation-api/sdk-php/commit/d600edc6cb485d3eb97c56682e75a5c800a0c717)) +* **internal:** codegen related update ([597bdf7](https://github.com/moderation-api/sdk-php/commit/597bdf718c72f298fd94157b21e9f64c17a2449d)) +* **internal:** codegen related update ([c26566d](https://github.com/moderation-api/sdk-php/commit/c26566d911dda034a275bef8a4ef280ee6a49255)) +* **internal:** codegen related update ([b2aba3e](https://github.com/moderation-api/sdk-php/commit/b2aba3e999c1375da44e8a8b9a6f0fdb7a649950)) +* **internal:** codegen related update ([5e43726](https://github.com/moderation-api/sdk-php/commit/5e4372642129cea14086a71f584d75ee3b52b5f8)) +* **internal:** codegen related update ([9b7c72f](https://github.com/moderation-api/sdk-php/commit/9b7c72f4df8838a5c2e5a597e95fccc625e828f5)) +* **internal:** codegen related update ([7cbad4c](https://github.com/moderation-api/sdk-php/commit/7cbad4c86abc4a9ac9dde0f97d4e9adc9f127c5e)) +* **internal:** codegen related update ([e6f45f4](https://github.com/moderation-api/sdk-php/commit/e6f45f4733e0da4e79072d7d76644e2bb8fc1f78)) +* **internal:** codegen related update ([b7631a0](https://github.com/moderation-api/sdk-php/commit/b7631a0f4a9fa10af3f6eda50be50fb78e66e222)) +* **internal:** codegen related update ([6171347](https://github.com/moderation-api/sdk-php/commit/6171347fc5833d947bf081bcac878e965555bf91)) +* **internal:** minor test script reformatting ([50ba7b7](https://github.com/moderation-api/sdk-php/commit/50ba7b776f4ef78948611ea7ecefcde18195dd73)) +* **internal:** refactor auth by moving concern from base client into client ([37eeb69](https://github.com/moderation-api/sdk-php/commit/37eeb691d9f06d91fa71e39e70ef335472621ee0)) +* **internal:** update `actions/checkout` version ([f3c6d09](https://github.com/moderation-api/sdk-php/commit/f3c6d09511b60b4d3b9fc5a01399a2eaaad3d76e)) +* **readme:** remove beta warning now that we're in ga ([dd62d54](https://github.com/moderation-api/sdk-php/commit/dd62d5463f2ff7c50e593a063f7db60fcaa6bcde)) + ## 0.3.0 (2025-12-10) Full Changelog: [v0.2.0...v0.3.0](https://github.com/moderation-api/sdk-php/compare/v0.2.0...v0.3.0) diff --git a/LICENSE b/LICENSE index d7eaab6..507011e 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2025 Moderation API + Copyright 2026 Moderation API Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index a137286..6554aa7 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,5 @@ # Moderation API PHP library -> [!NOTE] -> The Moderation API PHP API Library is currently in **beta** and we're excited for you to experiment with it! -> -> This library has not yet been exhaustively tested in production environments and may be missing some features you'd expect in a stable release. As we continue development, there may be breaking changes that require updates to your code. -> -> **We'd love your feedback!** Please share any suggestions, bug reports, feature requests, or general thoughts by [filing an issue](https://www.github.com/moderation-api/sdk-php/issues/new). - The Moderation API PHP library provides convenient access to the Moderation API REST API from any PHP 8.1.0+ application. ## Documentation @@ -18,7 +11,7 @@ The REST API documentation can be found on [docs.moderationapi.com](https://docs ``` -composer require "moderation-api/sdk-php 0.3.0" +composer require "moderation-api/sdk-php 0.4.0" ``` @@ -57,6 +50,8 @@ When the library is unable to connect to the API, or if the API returns a non-su content->submit( @@ -65,9 +60,9 @@ try { } catch (APIConnectionException $e) { echo "The server could not be reached", PHP_EOL; var_dump($e->getPrevious()); -} catch (RateLimitError $e) { +} catch (RateLimitException $e) { echo "A 429 status code was received; we should back off a bit.", PHP_EOL; -} catch (APIStatusError $e) { +} catch (APIStatusException $e) { echo "Another non-200-range status code was received", PHP_EOL; echo $e->getMessage(); } @@ -101,15 +96,14 @@ You can use the `maxRetries` option to configure or disable this: 0]); // Or, configure per-request: $result = $client->content->submit( content: ['text' => 'x', 'type' => 'text'], - requestOptions: RequestOptions::with(maxRetries: 5), + requestOptions: ['maxRetries' => 5], ); ``` @@ -126,15 +120,13 @@ Note: the `extra*` parameters of the same name overrides the documented paramete ```php content->submit( content: ['text' => 'x', 'type' => 'text'], - requestOptions: RequestOptions::with( - extraQueryParams: ['my_query_parameter' => 'value'], - extraBodyParams: ['my_body_parameter' => 'value'], - extraHeaders: ['my-header' => 'value'], - ), + requestOptions: [ + 'extraQueryParams' => ['my_query_parameter' => 'value'], + 'extraBodyParams' => ['my_body_parameter' => 'value'], + 'extraHeaders' => ['my-header' => 'value'], + ], ); ``` diff --git a/composer.json b/composer.json index 659c673..34f0c6e 100644 --- a/composer.json +++ b/composer.json @@ -3,8 +3,7 @@ "license": "Apache-2.0", "autoload": { "files": [ - "src/Core.php", - "src/Client.php" + "src/Version.php" ], "psr-4": { "ModerationAPI\\": "src/" @@ -41,6 +40,7 @@ "friendsofphp/php-cs-fixer": "^3", "nyholm/psr7": "^1", "pestphp/pest": "^3", + "php-http/mock-client": "^1", "phpstan/extension-installer": "^1", "phpstan/phpstan": "^2", "phpstan/phpstan-phpunit": "^2", diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..3f6c209 --- /dev/null +++ b/composer.lock @@ -0,0 +1,6672 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "5fc63f7c84d94b42416689723c547f69", + "packages": [ + { + "name": "php-http/discovery", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://github.com/php-http/discovery.git", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", + "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0|^2.0", + "php": "^7.1 || ^8.0" + }, + "conflict": { + "nyholm/psr7": "<1.0", + "zendframework/zend-diactoros": "*" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "*", + "psr/http-factory-implementation": "*", + "psr/http-message-implementation": "*" + }, + "require-dev": { + "composer/composer": "^1.0.2|^2.0", + "graham-campbell/phpspec-skip-example-extension": "^5.0", + "php-http/httplug": "^1.0 || ^2.0", + "php-http/message-factory": "^1.0", + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", + "sebastian/comparator": "^3.0.5 || ^4.0.8", + "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" + }, + "type": "composer-plugin", + "extra": { + "class": "Http\\Discovery\\Composer\\Plugin", + "plugin-optional": true + }, + "autoload": { + "psr-4": { + "Http\\Discovery\\": "src/" + }, + "exclude-from-classmap": [ + "src/Composer/Plugin.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", + "homepage": "http://php-http.org", + "keywords": [ + "adapter", + "client", + "discovery", + "factory", + "http", + "message", + "psr17", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/discovery/issues", + "source": "https://github.com/php-http/discovery/tree/1.20.0" + }, + "time": "2024-10-02T11:20:13+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", + "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client" + }, + "time": "2023-09-23T14:17:50+00:00" + }, + { + "name": "psr/http-message", + "version": "2.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/2.0" + }, + "time": "2023-04-04T09:54:51+00:00" + } + ], + "packages-dev": [ + { + "name": "brianium/paratest", + "version": "v7.8.4", + "source": { + "type": "git", + "url": "https://github.com/paratestphp/paratest.git", + "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/130a9bf0e269ee5f5b320108f794ad03e275cad4", + "reference": "130a9bf0e269ee5f5b320108f794ad03e275cad4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-simplexml": "*", + "fidry/cpu-core-counter": "^1.2.0", + "jean85/pretty-package-versions": "^2.1.1", + "php": "~8.2.0 || ~8.3.0 || ~8.4.0", + "phpunit/php-code-coverage": "^11.0.10", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-timer": "^7.0.1", + "phpunit/phpunit": "^11.5.24", + "sebastian/environment": "^7.2.1", + "symfony/console": "^6.4.22 || ^7.3.0", + "symfony/process": "^6.4.20 || ^7.3.0" + }, + "require-dev": { + "doctrine/coding-standard": "^12.0.0", + "ext-pcov": "*", + "ext-posix": "*", + "phpstan/phpstan": "^2.1.17", + "phpstan/phpstan-deprecation-rules": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.6", + "phpstan/phpstan-strict-rules": "^2.0.4", + "squizlabs/php_codesniffer": "^3.13.2", + "symfony/filesystem": "^6.4.13 || ^7.3.0" + }, + "bin": [ + "bin/paratest", + "bin/paratest_for_phpstorm" + ], + "type": "library", + "autoload": { + "psr-4": { + "ParaTest\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Scaturro", + "email": "scaturrob@gmail.com", + "role": "Developer" + }, + { + "name": "Filippo Tessarotto", + "email": "zoeslam@gmail.com", + "role": "Developer" + } + ], + "description": "Parallel testing for PHP", + "homepage": "https://github.com/paratestphp/paratest", + "keywords": [ + "concurrent", + "parallel", + "phpunit", + "testing" + ], + "support": { + "issues": "https://github.com/paratestphp/paratest/issues", + "source": "https://github.com/paratestphp/paratest/tree/v7.8.4" + }, + "funding": [ + { + "url": "https://github.com/sponsors/Slamdunk", + "type": "github" + }, + { + "url": "https://paypal.me/filippotessarotto", + "type": "paypal" + } + ], + "time": "2025-06-23T06:07:21+00:00" + }, + { + "name": "clue/ndjson-react", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/clue/reactphp-ndjson.git", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/reactphp-ndjson/zipball/392dc165fce93b5bb5c637b67e59619223c931b0", + "reference": "392dc165fce93b5bb5c637b67e59619223c931b0", + "shasum": "" + }, + "require": { + "php": ">=5.3", + "react/stream": "^1.2" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35", + "react/event-loop": "^1.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Clue\\React\\NDJson\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "Streaming newline-delimited JSON (NDJSON) parser and encoder for ReactPHP.", + "homepage": "https://github.com/clue/reactphp-ndjson", + "keywords": [ + "NDJSON", + "json", + "jsonlines", + "newline", + "reactphp", + "streaming" + ], + "support": { + "issues": "https://github.com/clue/reactphp-ndjson/issues", + "source": "https://github.com/clue/reactphp-ndjson/tree/v1.3.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2022-12-23T10:58:28+00:00" + }, + { + "name": "clue/stream-filter", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/clue/stream-filter.git", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", + "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "Clue\\StreamFilter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering" + } + ], + "description": "A simple and modern approach to stream filtering in PHP", + "homepage": "https://github.com/clue/stream-filter", + "keywords": [ + "bucket brigade", + "callback", + "filter", + "php_user_filter", + "stream", + "stream_filter_append", + "stream_filter_register" + ], + "support": { + "issues": "https://github.com/clue/stream-filter/issues", + "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + }, + "funding": [ + { + "url": "https://clue.engineering/support", + "type": "custom" + }, + { + "url": "https://github.com/clue", + "type": "github" + } + ], + "time": "2023-12-20T15:40:13+00:00" + }, + { + "name": "composer/pcre", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, + "require-dev": { + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" + }, + "type": "library", + "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-11-12T16:29:46+00:00" + }, + { + "name": "composer/semver", + "version": "3.4.4", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.4" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + } + ], + "time": "2025-08-20T19:15:30+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.5", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2024-05-06T16:37:16+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "1.1.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" + }, + "time": "2025-04-07T20:06:18+00:00" + }, + { + "name": "evenement/evenement", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/igorw/evenement.git", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", + "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", + "shasum": "" + }, + "require": { + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^9 || ^6" + }, + "type": "library", + "autoload": { + "psr-4": { + "Evenement\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + } + ], + "description": "Événement is a very simple event dispatching library for PHP", + "keywords": [ + "event-dispatcher", + "event-emitter" + ], + "support": { + "issues": "https://github.com/igorw/evenement/issues", + "source": "https://github.com/igorw/evenement/tree/v3.0.2" + }, + "time": "2023-08-08T05:53:35+00:00" + }, + { + "name": "fidry/cpu-core-counter", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/theofidry/cpu-core-counter.git", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "fidry/makefile": "^0.2.0", + "fidry/php-cs-fixer-config": "^1.1.2", + "phpstan/extension-installer": "^1.2.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^8.5.31 || ^9.5.26", + "webmozarts/strict-phpunit": "^7.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Fidry\\CpuCoreCounter\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Théo FIDRY", + "email": "theo.fidry@gmail.com" + } + ], + "description": "Tiny utility to get the number of CPU cores.", + "keywords": [ + "CPU", + "core" + ], + "support": { + "issues": "https://github.com/theofidry/cpu-core-counter/issues", + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/theofidry", + "type": "github" + } + ], + "time": "2025-08-14T07:29:31+00:00" + }, + { + "name": "filp/whoops", + "version": "2.18.4", + "source": { + "type": "git", + "url": "https://github.com/filp/whoops.git", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "require-dev": { + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^7.5.20 || ^8.5.8 || ^9.3.3", + "symfony/var-dumper": "^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.18.4" + }, + "funding": [ + { + "url": "https://github.com/denis-sokolov", + "type": "github" + } + ], + "time": "2025-08-08T12:00:00+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.92.5", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58", + "reference": "260cc8c4a1d2f6d2f22cd4f9c70aa72e55ebac58", + "shasum": "" + }, + "require": { + "clue/ndjson-react": "^1.3", + "composer/semver": "^3.4", + "composer/xdebug-handler": "^3.0.5", + "ext-filter": "*", + "ext-hash": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "fidry/cpu-core-counter": "^1.3", + "php": "^7.4 || ^8.0", + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" + }, + "require-dev": { + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31", + "justinrainbow/json-schema": "^6.6", + "keradus/cli-executor": "^2.3", + "mikey179/vfsstream": "^1.6.12", + "php-coveralls/php-coveralls": "^2.9", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", + "phpunit/phpunit": "^9.6.31 || ^10.5.60 || ^11.5.46", + "symfony/polyfill-php85": "^1.33", + "symfony/var-dumper": "^5.4.48 || ^6.4.26 || ^7.4.0 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.30 || ^7.4.1 || ^8.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + }, + "exclude-from-classmap": [ + "src/**/Internal/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "keywords": [ + "Static code analysis", + "fixer", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.5" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2026-01-08T21:57:37+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^2.0", + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", + "vimeo/psalm": "^4.3 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A library to get pretty versions strings of installed dependencies", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "support": { + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" + }, + "time": "2025-03-19T14:43:43+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.13.4", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v5.7.0", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-json": "*", + "ext-tokenizer": "*", + "php": ">=7.4" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.x-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" + }, + "time": "2025-12-06T11:56:16+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.8.3", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "reference": "1dc9e88d105699d0fee8bb18890f41b274f6b4c4", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.1", + "nunomaduro/termwind": "^2.3.1", + "php": "^8.2.0", + "symfony/console": "^7.3.0" + }, + "conflict": { + "laravel/framework": "<11.44.2 || >=13.0.0", + "phpunit/phpunit": "<11.5.15 || >=13.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.3", + "larastan/larastan": "^3.4.2", + "laravel/framework": "^11.44.2 || ^12.18", + "laravel/pint": "^1.22.1", + "laravel/sail": "^1.43.1", + "laravel/sanctum": "^4.1.1", + "laravel/tinker": "^2.10.1", + "orchestra/testbench-core": "^9.12.0 || ^10.4", + "pestphp/pest": "^3.8.2 || ^4.0.0", + "sebastian/environment": "^7.2.1 || ^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" + ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" + } + }, + "autoload": { + "files": [ + "./src/Adapters/Phpunit/Autoload.php" + ], + "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", + "dev", + "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": "2025-11-20T02:55:25+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v2.3.3", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "reference": "6fb2a640ff502caace8e05fd7be3b503a7e1c017", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.2", + "symfony/console": "^7.3.6" + }, + "require-dev": { + "illuminate/console": "^11.46.1", + "laravel/pint": "^1.25.1", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.1.3", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.3" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2025-11-20T02:34:59+00:00" + }, + { + "name": "nyholm/psr7", + "version": "1.8.2", + "source": { + "type": "git", + "url": "https://github.com/Nyholm/psr7.git", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Nyholm/psr7/zipball/a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "reference": "a71f2b11690f4b24d099d6b16690a90ae14fc6f3", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0", + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "http-interop/http-factory-tests": "^0.9", + "php-http/message-factory": "^1.0", + "php-http/psr7-integration-tests": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.4", + "symfony/error-handler": "^4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8-dev" + } + }, + "autoload": { + "psr-4": { + "Nyholm\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Tobias Nyholm", + "email": "tobias.nyholm@gmail.com" + }, + { + "name": "Martijn van der Ven", + "email": "martijn@vanderven.se" + } + ], + "description": "A fast PHP7 implementation of PSR-7", + "homepage": "https://tnyholm.se", + "keywords": [ + "psr-17", + "psr-7" + ], + "support": { + "issues": "https://github.com/Nyholm/psr7/issues", + "source": "https://github.com/Nyholm/psr7/tree/1.8.2" + }, + "funding": [ + { + "url": "https://github.com/Zegnat", + "type": "github" + }, + { + "url": "https://github.com/nyholm", + "type": "github" + } + ], + "time": "2024-09-09T07:06:30+00:00" + }, + { + "name": "pestphp/pest", + "version": "v3.8.4", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest.git", + "reference": "72cf695554420e21858cda831d5db193db102574" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest/zipball/72cf695554420e21858cda831d5db193db102574", + "reference": "72cf695554420e21858cda831d5db193db102574", + "shasum": "" + }, + "require": { + "brianium/paratest": "^7.8.4", + "nunomaduro/collision": "^8.8.2", + "nunomaduro/termwind": "^2.3.1", + "pestphp/pest-plugin": "^3.0.0", + "pestphp/pest-plugin-arch": "^3.1.1", + "pestphp/pest-plugin-mutate": "^3.0.5", + "php": "^8.2.0", + "phpunit/phpunit": "^11.5.33" + }, + "conflict": { + "filp/whoops": "<2.16.0", + "phpunit/phpunit": ">11.5.33", + "sebastian/exporter": "<6.0.0", + "webmozart/assert": "<1.11.0" + }, + "require-dev": { + "pestphp/pest-dev-tools": "^3.4.0", + "pestphp/pest-plugin-type-coverage": "^3.6.1", + "symfony/process": "^7.3.0" + }, + "bin": [ + "bin/pest" + ], + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Mutate\\Plugins\\Mutate", + "Pest\\Plugins\\Configuration", + "Pest\\Plugins\\Bail", + "Pest\\Plugins\\Cache", + "Pest\\Plugins\\Coverage", + "Pest\\Plugins\\Init", + "Pest\\Plugins\\Environment", + "Pest\\Plugins\\Help", + "Pest\\Plugins\\Memory", + "Pest\\Plugins\\Only", + "Pest\\Plugins\\Printer", + "Pest\\Plugins\\ProcessIsolation", + "Pest\\Plugins\\Profile", + "Pest\\Plugins\\Retry", + "Pest\\Plugins\\Snapshot", + "Pest\\Plugins\\Verbose", + "Pest\\Plugins\\Version", + "Pest\\Plugins\\Parallel" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "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": "The 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/v3.8.4" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2025-08-20T19:12:42+00:00" + }, + { + "name": "pestphp/pest-plugin", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin.git", + "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin/zipball/e79b26c65bc11c41093b10150c1341cc5cdbea83", + "reference": "e79b26c65bc11c41093b10150c1341cc5cdbea83", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0.0", + "composer-runtime-api": "^2.2.2", + "php": "^8.2" + }, + "conflict": { + "pestphp/pest": "<3.0.0" + }, + "require-dev": { + "composer/composer": "^2.7.9", + "pestphp/pest": "^3.0.0", + "pestphp/pest-dev-tools": "^3.0.0" + }, + "type": "composer-plugin", + "extra": { + "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/v3.0.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": "2024-09-08T23:21:41+00:00" + }, + { + "name": "pestphp/pest-plugin-arch", + "version": "v3.1.1", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-arch.git", + "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-arch/zipball/db7bd9cb1612b223e16618d85475c6f63b9c8daa", + "reference": "db7bd9cb1612b223e16618d85475c6f63b9c8daa", + "shasum": "" + }, + "require": { + "pestphp/pest-plugin": "^3.0.0", + "php": "^8.2", + "ta-tikoma/phpunit-architecture-test": "^0.8.4" + }, + "require-dev": { + "pestphp/pest": "^3.8.1", + "pestphp/pest-dev-tools": "^3.4.0" + }, + "type": "library", + "extra": { + "pest": { + "plugins": [ + "Pest\\Arch\\Plugin" + ] + } + }, + "autoload": { + "files": [ + "src/Autoload.php" + ], + "psr-4": { + "Pest\\Arch\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "The Arch plugin for Pest PHP.", + "keywords": [ + "arch", + "architecture", + "framework", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-arch/tree/v3.1.1" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2025-04-16T22:59:48+00:00" + }, + { + "name": "pestphp/pest-plugin-mutate", + "version": "v3.0.5", + "source": { + "type": "git", + "url": "https://github.com/pestphp/pest-plugin-mutate.git", + "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/pestphp/pest-plugin-mutate/zipball/e10dbdc98c9e2f3890095b4fe2144f63a5717e08", + "reference": "e10dbdc98c9e2f3890095b4fe2144f63a5717e08", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.2.0", + "pestphp/pest-plugin": "^3.0.0", + "php": "^8.2", + "psr/simple-cache": "^3.0.0" + }, + "require-dev": { + "pestphp/pest": "^3.0.8", + "pestphp/pest-dev-tools": "^3.0.0", + "pestphp/pest-plugin-type-coverage": "^3.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Pest\\Mutate\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Sandro Gehri", + "email": "sandrogehri@gmail.com" + } + ], + "description": "Mutates your code to find untested cases", + "keywords": [ + "framework", + "mutate", + "mutation", + "pest", + "php", + "plugin", + "test", + "testing", + "unit" + ], + "support": { + "source": "https://github.com/pestphp/pest-plugin-mutate/tree/v3.0.5" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/gehrisandro", + "type": "github" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + } + ], + "time": "2024-09-22T07:54:40+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "54750ef60c58e43759730615a392c31c80e23176" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "support": { + "issues": "https://github.com/phar-io/manifest/issues", + "source": "https://github.com/phar-io/manifest/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "php-http/client-common", + "version": "2.7.3", + "source": { + "type": "git", + "url": "https://github.com/php-http/client-common.git", + "reference": "dcc6de29c90dd74faab55f71b79d89409c4bf0c1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/client-common/zipball/dcc6de29c90dd74faab55f71b79d89409c4bf0c1", + "reference": "dcc6de29c90dd74faab55f71b79d89409c4bf0c1", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/httplug": "^2.0", + "php-http/message": "^1.6", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "doctrine/instantiator": "^1.1", + "guzzlehttp/psr7": "^1.4", + "nyholm/psr7": "^1.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + }, + "suggest": { + "ext-json": "To detect JSON responses with the ContentTypePlugin", + "ext-libxml": "To detect XML responses with the ContentTypePlugin", + "php-http/cache-plugin": "PSR-6 Cache plugin", + "php-http/logger-plugin": "PSR-3 Logger plugin", + "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\Common\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Common HTTP Client implementations and tools for HTTPlug", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "common", + "http", + "httplug" + ], + "support": { + "issues": "https://github.com/php-http/client-common/issues", + "source": "https://github.com/php-http/client-common/tree/2.7.3" + }, + "time": "2025-11-29T19:12:34+00:00" + }, + { + "name": "php-http/httplug", + "version": "2.4.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/httplug.git", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", + "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/promise": "^1.1", + "psr/http-client": "^1.0", + "psr/http-message": "^1.0 || ^2.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", + "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eric GELOEN", + "email": "geloen.eric@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "HTTPlug, the HTTP client abstraction for PHP", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http" + ], + "support": { + "issues": "https://github.com/php-http/httplug/issues", + "source": "https://github.com/php-http/httplug/tree/2.4.1" + }, + "time": "2024-09-23T11:39:58+00:00" + }, + { + "name": "php-http/message", + "version": "1.16.2", + "source": { + "type": "git", + "url": "https://github.com/php-http/message.git", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", + "shasum": "" + }, + "require": { + "clue/stream-filter": "^1.5", + "php": "^7.2 || ^8.0", + "psr/http-message": "^1.1 || ^2.0" + }, + "provide": { + "php-http/message-factory-implementation": "1.0" + }, + "require-dev": { + "ergebnis/composer-normalize": "^2.6", + "ext-zlib": "*", + "guzzlehttp/psr7": "^1.0 || ^2.0", + "laminas/laminas-diactoros": "^2.0 || ^3.0", + "php-http/message-factory": "^1.0.2", + "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", + "slim/slim": "^3.0" + }, + "suggest": { + "ext-zlib": "Used with compressor/decompressor streams", + "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", + "laminas/laminas-diactoros": "Used with Diactoros Factories", + "slim/slim": "Used with Slim Framework PSR-7 implementation" + }, + "type": "library", + "autoload": { + "files": [ + "src/filters.php" + ], + "psr-4": { + "Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "HTTP Message related tools", + "homepage": "http://php-http.org", + "keywords": [ + "http", + "message", + "psr-7" + ], + "support": { + "issues": "https://github.com/php-http/message/issues", + "source": "https://github.com/php-http/message/tree/1.16.2" + }, + "time": "2024-10-02T11:34:13+00:00" + }, + { + "name": "php-http/mock-client", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/mock-client.git", + "reference": "81f558234421f7da58ed015604a03808996017d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/mock-client/zipball/81f558234421f7da58ed015604a03808996017d0", + "reference": "81f558234421f7da58ed015604a03808996017d0", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0", + "php-http/client-common": "^2.0", + "php-http/discovery": "^1.16", + "php-http/httplug": "^2.0", + "psr/http-client": "^1.0", + "psr/http-factory-implementation": "^1.0", + "psr/http-message": "^1.0 || ^2.0", + "symfony/polyfill-php80": "^1.17" + }, + "provide": { + "php-http/async-client-implementation": "1.0", + "php-http/client-implementation": "1.0", + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Mock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "David de Boer", + "email": "david@ddeboer.nl" + } + ], + "description": "Mock HTTP client", + "homepage": "http://httplug.io", + "keywords": [ + "client", + "http", + "mock", + "psr7" + ], + "support": { + "issues": "https://github.com/php-http/mock-client/issues", + "source": "https://github.com/php-http/mock-client/tree/1.6.1" + }, + "time": "2024-10-31T10:30:18+00:00" + }, + { + "name": "php-http/promise", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/php-http/promise.git", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", + "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Http\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Joel Wurtz", + "email": "joel.wurtz@gmail.com" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com" + } + ], + "description": "Promise used for asynchronous HTTP requests", + "homepage": "http://httplug.io", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/php-http/promise/issues", + "source": "https://github.com/php-http/promise/tree/1.3.1" + }, + "time": "2024-03-15T13:55:21+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.6.6", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.1", + "ext-filter": "*", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.2", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", + "webmozart/assert": "^1.9.1 || ^2" + }, + "require-dev": { + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" + }, + "type": "library", + "extra": { + "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": "opensource@ijaap.nl" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "support": { + "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" + }, + "time": "2025-12-22T21:13:58+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "1.12.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.3 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.18|^2.0" + }, + "require-dev": { + "ext-tokenizer": "*", + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "extra": { + "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.12.0" + }, + "time": "2025-11-21T15:09:14+00:00" + }, + { + "name": "phpstan/extension-installer", + "version": "1.4.3", + "source": { + "type": "git", + "url": "https://github.com/phpstan/extension-installer.git", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936", + "reference": "85e90b3942d06b2326fba0403ec24fe912372936", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.9.0 || ^2.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "php-parallel-lint/php-parallel-lint": "^1.2.0", + "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPStan\\ExtensionInstaller\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPStan\\ExtensionInstaller\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Composer plugin for automatic installation of PHPStan extensions", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "issues": "https://github.com/phpstan/extension-installer/issues", + "source": "https://github.com/phpstan/extension-installer/tree/1.4.3" + }, + "time": "2024-09-04T20:21:43+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" + }, + "time": "2025-08-30T15:50:23+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.33", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f", + "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2025-12-05T10:24:31+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "2.0.11", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "5e30669bef866eff70db8b58d72a5c185aa82414" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/5e30669bef866eff70db8b58d72a5c185aa82414", + "reference": "5e30669bef866eff70db8b58d72a5c185aa82414", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^2.1.32" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "nikic/php-parser": "^5", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "support": { + "issues": "https://github.com/phpstan/phpstan-phpunit/issues", + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.11" + }, + "time": "2025-12-19T09:05:35+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "11.0.12", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^5.7.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-text-template": "^4.0.1", + "sebastian/code-unit-reverse-lookup": "^4.0.1", + "sebastian/complexity": "^4.0.1", + "sebastian/environment": "^7.2.1", + "sebastian/lines-of-code": "^3.0.1", + "sebastian/version": "^5.0.2", + "theseer/tokenizer": "^1.3.1" + }, + "require-dev": { + "phpunit/phpunit": "^11.5.46" + }, + "suggest": { + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" + } + ], + "time": "2025-12-24T07:01:01+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "5.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/118cfaaa8bc5aef3287bf315b6060b1174754af6", + "reference": "118cfaaa8bc5aef3287bf315b6060b1174754af6", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.1.0" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-08-27T05:02:59+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "5.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/c1ca3814734c07492b3d4c5f794f4b0995333da2", + "reference": "c1ca3814734c07492b3d4c5f794f4b0995333da2", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^11.0" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:07:44+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "reference": "3e0404dc6b300e6bf56415467ebcb3fe4f33e964", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:08:43+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "7.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "reference": "3b415def83fbcb41f991d9ebf16ae4ad8b7837b3", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:09:35+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "11.5.33", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", + "reference": "5965e9ff57546cb9137c0ff6aa78cb7442b05cf6", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.13.4", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0.10", + "phpunit/php-file-iterator": "^5.1.0", + "phpunit/php-invoker": "^5.0.1", + "phpunit/php-text-template": "^4.0.1", + "phpunit/php-timer": "^7.0.1", + "sebastian/cli-parser": "^3.0.2", + "sebastian/code-unit": "^3.0.3", + "sebastian/comparator": "^6.3.2", + "sebastian/diff": "^6.0.2", + "sebastian/environment": "^7.2.1", + "sebastian/exporter": "^6.3.0", + "sebastian/global-state": "^7.0.2", + "sebastian/object-enumerator": "^6.0.1", + "sebastian/type": "^5.1.3", + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" + }, + "suggest": { + "ext-soap": "To be able to generate mocks based on WSDL files" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "11.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.33" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2025-08-16T05:19:02+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "psr/http-message": "^1.0 || ^2.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": "https://www.php-fig.org/" + } + ], + "description": "PSR-17: 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" + }, + "time": "2024-04-15T12:06:14+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "react/cache", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/cache.git", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b", + "reference": "d47c472b64aa5608225f47965a484b75c7817d5b", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/promise": "^3.0 || ^2.0 || ^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, Promise-based cache interface for ReactPHP", + "keywords": [ + "cache", + "caching", + "promise", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/cache/issues", + "source": "https://github.com/reactphp/cache/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2022-11-30T15:59:55+00:00" + }, + { + "name": "react/child-process", + "version": "v0.6.7", + "source": { + "type": "git", + "url": "https://github.com/reactphp/child-process.git", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/event-loop": "^1.2", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/socket": "^1.16", + "sebastian/environment": "^5.0 || ^3.0 || ^2.0 || ^1.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\ChildProcess\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven library for executing child processes with ReactPHP.", + "keywords": [ + "event-driven", + "process", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/child-process/issues", + "source": "https://github.com/reactphp/child-process/tree/v0.6.7" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-12-23T15:25:20+00:00" + }, + { + "name": "react/dns", + "version": "v1.14.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/dns.git", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", + "shasum": "" + }, + "require": { + "php": ">=5.3.0", + "react/cache": "^1.0 || ^0.6 || ^0.5", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.7 || ^1.2.1" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3 || ^2", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Dns\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async DNS resolver for ReactPHP", + "keywords": [ + "async", + "dns", + "dns-resolver", + "reactphp" + ], + "support": { + "issues": "https://github.com/reactphp/dns/issues", + "source": "https://github.com/reactphp/dns/tree/v1.14.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-18T19:34:28+00:00" + }, + { + "name": "react/event-loop", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/event-loop.git", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "suggest": { + "ext-pcntl": "For signal handling support when using the StreamSelectLoop" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\EventLoop\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "ReactPHP's core reactor event loop that libraries can use for evented I/O.", + "keywords": [ + "asynchronous", + "event-loop" + ], + "support": { + "issues": "https://github.com/reactphp/event-loop/issues", + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-17T20:46:25+00:00" + }, + { + "name": "react/promise", + "version": "v3.3.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/promise.git", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", + "shasum": "" + }, + "require": { + "php": ">=7.1.0" + }, + "require-dev": { + "phpstan/phpstan": "1.12.28 || 1.4.10", + "phpunit/phpunit": "^9.6 || ^7.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/functions_include.php" + ], + "psr-4": { + "React\\Promise\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "A lightweight implementation of CommonJS Promises/A for PHP", + "keywords": [ + "promise", + "promises" + ], + "support": { + "issues": "https://github.com/reactphp/promise/issues", + "source": "https://github.com/reactphp/promise/tree/v3.3.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-08-19T18:57:03+00:00" + }, + { + "name": "react/socket", + "version": "v1.17.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/socket.git", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.0", + "react/dns": "^1.13", + "react/event-loop": "^1.2", + "react/promise": "^3.2 || ^2.6 || ^1.2.1", + "react/stream": "^1.4" + }, + "require-dev": { + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36", + "react/async": "^4.3 || ^3.3 || ^2", + "react/promise-stream": "^1.4", + "react/promise-timer": "^1.11" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Socket\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP", + "keywords": [ + "Connection", + "Socket", + "async", + "reactphp", + "stream" + ], + "support": { + "issues": "https://github.com/reactphp/socket/issues", + "source": "https://github.com/reactphp/socket/tree/v1.17.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2025-11-19T20:47:34+00:00" + }, + { + "name": "react/stream", + "version": "v1.4.0", + "source": { + "type": "git", + "url": "https://github.com/reactphp/stream.git", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d", + "shasum": "" + }, + "require": { + "evenement/evenement": "^3.0 || ^2.0 || ^1.0", + "php": ">=5.3.8", + "react/event-loop": "^1.2" + }, + "require-dev": { + "clue/stream-filter": "~1.2", + "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + }, + "type": "library", + "autoload": { + "psr-4": { + "React\\Stream\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Lück", + "email": "christian@clue.engineering", + "homepage": "https://clue.engineering/" + }, + { + "name": "Cees-Jan Kiewiet", + "email": "reactphp@ceesjankiewiet.nl", + "homepage": "https://wyrihaximus.net/" + }, + { + "name": "Jan Sorgalla", + "email": "jsorgalla@gmail.com", + "homepage": "https://sorgalla.com/" + }, + { + "name": "Chris Boden", + "email": "cboden@gmail.com", + "homepage": "https://cboden.dev/" + } + ], + "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP", + "keywords": [ + "event-driven", + "io", + "non-blocking", + "pipe", + "reactphp", + "readable", + "stream", + "writable" + ], + "support": { + "issues": "https://github.com/reactphp/stream/issues", + "source": "https://github.com/reactphp/stream/tree/v1.4.0" + }, + "funding": [ + { + "url": "https://opencollective.com/reactphp", + "type": "open_collective" + } + ], + "time": "2024-06-11T12:45:25+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/15c5dd40dc4f38794d383bb95465193f5e0ae180", + "reference": "15c5dd40dc4f38794d383bb95465193f5e0ae180", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:41:36+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "reference": "54391c61e4af8078e5b276ab082b6d3c54c9ad64", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2025-03-19T07:56:08+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/183a9b2632194febd219bb9246eee421dad8d45e", + "reference": "183a9b2632194febd219bb9246eee421dad8d45e", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:45:54+00:00" + }, + { + "name": "sebastian/comparator", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8", + "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.4" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "security": "https://github.com/sebastianbergmann/comparator/security/policy", + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" + } + ], + "time": "2025-08-10T08:07:46+00:00" + }, + { + "name": "sebastian/complexity", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/ee41d384ab1906c68852636b6de493846e13e5a0", + "reference": "ee41d384ab1906c68852636b6de493846e13e5a0", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "security": "https://github.com/sebastianbergmann/complexity/security/policy", + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:49:50+00:00" + }, + { + "name": "sebastian/diff", + "version": "6.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b4ccd857127db5d41a5b676f24b51371d76d8544", + "reference": "b4ccd857127db5d41a5b676f24b51371d76d8544", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "security": "https://github.com/sebastianbergmann/diff/security/policy", + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:53:05+00:00" + }, + { + "name": "sebastian/environment", + "version": "7.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/a5c75038693ad2e8d4b6c15ba2403532647830c4", + "reference": "a5c75038693ad2e8d4b6c15ba2403532647830c4", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "https://github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "security": "https://github.com/sebastianbergmann/environment/security/policy", + "source": "https://github.com/sebastianbergmann/environment/tree/7.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" + } + ], + "time": "2025-05-21T11:55:47+00:00" + }, + { + "name": "sebastian/exporter", + "version": "6.3.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.3-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "https://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/exporter/issues", + "security": "https://github.com/sebastianbergmann/exporter/security/policy", + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" + } + ], + "time": "2025-09-24T06:12:51+00:00" + }, + { + "name": "sebastian/global-state", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/3be331570a721f9a4b5917f4209773de17f747d7", + "reference": "3be331570a721f9a4b5917f4209773de17f747d7", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "https://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "security": "https://github.com/sebastianbergmann/global-state/security/policy", + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:57:36+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "reference": "d36ad0d782e5756913e42ad87cb2890f4ffe467a", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^5.0", + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T04:58:38+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "6.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f5b498e631a74204185071eb41f33f38d64608aa", + "reference": "f5b498e631a74204185071eb41f33f38d64608aa", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:00:13+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "reference": "6e1a43b411b2ad34146dee7524cb13a068bb35f9", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-07-03T05:01:32+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "6.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" + } + ], + "time": "2025-08-13T04:42:22+00:00" + }, + { + "name": "sebastian/type", + "version": "5.1.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "phpunit/phpunit": "^11.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.1.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" + } + ], + "time": "2025-08-09T06:55:48+00:00" + }, + { + "name": "sebastian/version", + "version": "5.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c687e3387b99f5b03b6caa64c74b63e2936ff874", + "reference": "c687e3387b99f5b03b6caa64c74b63e2936ff874", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2024-10-09T05:16:32+00:00" + }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, + { + "name": "symfony/console", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "reference": "732a9ca6cd9dfd940c639062d5edbde2f6727fb6", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^7.2|^8.0" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/event-dispatcher": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/lock": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0", + "symfony/var-dumper": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T14:50:43+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.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": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "reference": "9dddcddff1ef974ad87b3708e4b442dc38b2261d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/event-dispatcher-contracts": "^2.5|^3" + }, + "conflict": { + "symfony/dependency-injection": "<6.4", + "symfony/service-contracts": "<2.5" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/error-handler": "^6.4|^7.0|^8.0", + "symfony/expression-language": "^6.4|^7.0|^8.0", + "symfony/framework-bundle": "^6.4|^7.0|^8.0", + "symfony/http-foundation": "^6.4|^7.0|^8.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/event-dispatcher/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-10-28T09:38:46+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.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": "2024-09-25T14:21:43+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/d551b38811096d0be9c4691d406991b47c0c630a", + "reference": "d551b38811096d0be9c4691d406991b47c0c630a", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "require-dev": { + "symfony/process": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:27:24+00:00" + }, + { + "name": "symfony/finder", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "fffe05569336549b20a1be64250b40516d6e8d06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/fffe05569336549b20a1be64250b40516d6e8d06", + "reference": "fffe05569336549b20a1be64250b40516d6e8d06", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "symfony/filesystem": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T14:50:43+00:00" + }, + { + "name": "symfony/http-client", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client.git", + "reference": "d01dfac1e0dc99f18da48b18101c23ce57929616" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client/zipball/d01dfac1e0dc99f18da48b18101c23ce57929616", + "reference": "d01dfac1e0dc99f18da48b18101c23ce57929616", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", + "symfony/service-contracts": "^2.5|^3" + }, + "conflict": { + "amphp/amp": "<2.5", + "amphp/socket": "<1.1", + "php-http/discovery": "<1.15", + "symfony/http-foundation": "<6.4" + }, + "provide": { + "php-http/async-client-implementation": "*", + "php-http/client-implementation": "*", + "psr/http-client-implementation": "1.0", + "symfony/http-client-implementation": "3.0" + }, + "require-dev": { + "amphp/http-client": "^4.2.1|^5.0", + "amphp/http-tunnel": "^1.0|^2.0", + "guzzlehttp/promises": "^1.4|^2.0", + "nyholm/psr7": "^1.0", + "php-http/httplug": "^1.0|^2.0", + "psr/http-client": "^1.0", + "symfony/amphp-http-client-meta": "^1.0|^2.0", + "symfony/cache": "^6.4|^7.0|^8.0", + "symfony/dependency-injection": "^6.4|^7.0|^8.0", + "symfony/http-kernel": "^6.4|^7.0|^8.0", + "symfony/messenger": "^6.4|^7.0|^8.0", + "symfony/process": "^6.4|^7.0|^8.0", + "symfony/rate-limiter": "^6.4|^7.0|^8.0", + "symfony/stopwatch": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", + "homepage": "https://symfony.com", + "keywords": [ + "http" + ], + "support": { + "source": "https://github.com/symfony/http-client/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-23T14:50:43+00:00" + }, + { + "name": "symfony/http-client-contracts", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-client-contracts.git", + "reference": "75d7043853a42837e68111812f4d964b01e5101c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\HttpClient\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "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/v3.6.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": "2025-04-29T11:18:49+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "b38026df55197f9e39a44f3215788edf83187b80" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/b38026df55197f9e39a44f3215788edf83187b80", + "reference": "b38026df55197f9e39a44f3215788edf83187b80", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-12T15:39:26+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70", + "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-27T09:58:17+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "3833d7255cc303546435cb650316bff708a1c75c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "php": ">=7.2" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-12-23T08:48:59+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-01-02T08:10:11+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "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.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-09-09T11:45:10+00:00" + }, + { + "name": "symfony/polyfill-php83", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, + "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.3+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-08T02:45:35+00:00" + }, + { + "name": "symfony/polyfill-php84", + "version": "v1.33.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "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.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/process", + "version": "v7.4.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "reference": "2f8e1a6cdf590ca63715da4d3a7a3327404a523f", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v7.4.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-12-19T10:00:43+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.6.1", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-07-15T11:30:57+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "8a24af0a2e8a872fb745047180649b8418303084" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/8a24af0a2e8a872fb745047180649b8418303084", + "reference": "8a24af0a2e8a872fb745047180649b8418303084", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/service-contracts": "^2.5|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-08-04T07:05:15+00:00" + }, + { + "name": "symfony/string", + "version": "v7.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/d50e862cb0a0e0886f73ca1f31b865efbb795003", + "reference": "d50e862cb0a0e0886f73ca1f31b865efbb795003", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.33", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.5" + }, + "require-dev": { + "symfony/emoji": "^7.1|^8.0", + "symfony/http-client": "^6.4|^7.0|^8.0", + "symfony/intl": "^6.4|^7.0|^8.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^6.4|^7.0|^8.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v7.4.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-11-27T13:27:24+00:00" + }, + { + "name": "ta-tikoma/phpunit-architecture-test", + "version": "0.8.5", + "source": { + "type": "git", + "url": "https://github.com/ta-tikoma/phpunit-architecture-test.git", + "reference": "cf6fb197b676ba716837c886baca842e4db29005" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ta-tikoma/phpunit-architecture-test/zipball/cf6fb197b676ba716837c886baca842e4db29005", + "reference": "cf6fb197b676ba716837c886baca842e4db29005", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.18.0 || ^5.0.0", + "php": "^8.1.0", + "phpdocumentor/reflection-docblock": "^5.3.0", + "phpunit/phpunit": "^10.5.5 || ^11.0.0 || ^12.0.0", + "symfony/finder": "^6.4.0 || ^7.0.0" + }, + "require-dev": { + "laravel/pint": "^1.13.7", + "phpstan/phpstan": "^1.10.52" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPUnit\\Architecture\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ni Shi", + "email": "futik0ma011@gmail.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Methods for testing application architecture", + "keywords": [ + "architecture", + "phpunit", + "stucture", + "test", + "testing" + ], + "support": { + "issues": "https://github.com/ta-tikoma/phpunit-architecture-test/issues", + "source": "https://github.com/ta-tikoma/phpunit-architecture-test/tree/0.8.5" + }, + "time": "2025-04-20T20:23:40+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.3.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "support": { + "issues": "https://github.com/theseer/tokenizer/issues", + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2025-11-17T20:03:58+00:00" + }, + { + "name": "webmozart/assert", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "bdbabc199a7ba9965484e4725d66170e5711323b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/bdbabc199a7ba9965484e4725d66170e5711323b", + "reference": "bdbabc199a7ba9965484e4725d66170e5711323b", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", + "php": "^8.2" + }, + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-feature/2-0": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + }, + { + "name": "Woody Gilk", + "email": "woody.gilk@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/2.1.1" + }, + "time": "2026-01-08T11:28:40+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": {}, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": {}, + "platform-overrides": { + "php": "8.3" + }, + "plugin-api-version": "2.6.0" +} diff --git a/release-please-config.json b/release-please-config.json index 5c15181..83bea62 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -62,6 +62,6 @@ "release-type": "php", "extra-files": [ "README.md", - "src/Client.php" + "src/Version.php" ] } \ No newline at end of file diff --git a/scripts/test b/scripts/test index a8dc7cd..4b777e0 100755 --- a/scripts/test +++ b/scripts/test @@ -10,7 +10,7 @@ YELLOW='\033[0;33m' NC='\033[0m' # No Color function prism_is_running() { - curl --silent "http://localhost:4010" > /dev/null 2>&1 + curl --silent "http://localhost:4010" >/dev/null 2>&1 } kill_server_on_port() { @@ -25,7 +25,7 @@ function is_overriding_api_base_url() { [ -n "$TEST_API_BASE_URL" ] } -if ! is_overriding_api_base_url && ! prism_is_running; then +if ! is_overriding_api_base_url && ! prism_is_running ; then # When we exit this script, make sure to kill the background mock server process trap 'kill_server_on_port 4010' EXIT @@ -33,10 +33,10 @@ if ! is_overriding_api_base_url && ! prism_is_running; then ./scripts/mock --daemon fi -if is_overriding_api_base_url; then +if is_overriding_api_base_url ; then echo -e "${GREEN}✔ Running tests against ${TEST_API_BASE_URL}${NC}" echo -elif ! prism_is_running; then +elif ! prism_is_running ; then echo -e "${RED}ERROR:${NC} The test suite will not run without a mock Prism server" echo -e "running against your OpenAPI spec." echo diff --git a/src/Account/AccountListResponse.php b/src/Account/AccountListResponse.php index 6c93889..7582933 100644 --- a/src/Account/AccountListResponse.php +++ b/src/Account/AccountListResponse.php @@ -11,12 +11,14 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type CurrentProjectShape from \ModerationAPI\Account\AccountListResponse\CurrentProject + * * @phpstan-type AccountListResponseShape = array{ * id: string, * paidPlanName: string, * remainingQuota: float, * textAPIQuota: float, - * currentProject?: CurrentProject|null, + * currentProject?: null|CurrentProject|CurrentProjectShape, * } */ final class AccountListResponse implements BaseModel @@ -81,7 +83,7 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param CurrentProject|array{id: string, name: string} $currentProject + * @param CurrentProject|CurrentProjectShape|null $currentProject */ public static function with( string $id, @@ -147,7 +149,7 @@ public function withTextAPIQuota(float $textAPIQuota): self } /** - * @param CurrentProject|array{id: string, name: string} $currentProject + * @param CurrentProject|CurrentProjectShape $currentProject */ public function withCurrentProject( CurrentProject|array $currentProject diff --git a/src/Actions/ActionCreateParams.php b/src/Actions/ActionCreateParams.php index ac0edf9..6451fe5 100644 --- a/src/Actions/ActionCreateParams.php +++ b/src/Actions/ActionCreateParams.php @@ -20,21 +20,22 @@ * * @see ModerationAPI\Services\ActionsService::create() * + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionCreateParams\PossibleValue + * @phpstan-import-type WebhookShape from \ModerationAPI\Actions\ActionCreateParams\Webhook + * * @phpstan-type ActionCreateParamsShape = array{ * name: string, * builtIn?: bool|null, * description?: string|null, - * filterInQueueIDs?: list, - * freeText?: bool, + * filterInQueueIDs?: list|null, + * freeText?: bool|null, * key?: string|null, - * position?: Position|value-of, - * possibleValues?: list, - * queueBehaviour?: QueueBehaviour|value-of, + * position?: null|Position|value-of, + * possibleValues?: list|null, + * queueBehaviour?: null|QueueBehaviour|value-of, * type?: null|Type|value-of, - * valueRequired?: bool, - * webhooks?: list, + * valueRequired?: bool|null, + * webhooks?: list|null, * } */ final class ActionCreateParams implements BaseModel @@ -151,14 +152,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param list $filterInQueueIDs - * @param Position|value-of $position - * @param list $possibleValues - * @param QueueBehaviour|value-of $queueBehaviour + * @param list|null $filterInQueueIDs + * @param Position|value-of|null $position + * @param list|null $possibleValues + * @param QueueBehaviour|value-of|null $queueBehaviour * @param Type|value-of|null $type - * @param list $webhooks + * @param list|null $webhooks */ public static function with( string $name, @@ -277,7 +276,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { @@ -328,9 +327,7 @@ public function withValueRequired(bool $valueRequired): self /** * The action's webhooks. * - * @param list $webhooks + * @param list $webhooks */ public function withWebhooks(array $webhooks): self { diff --git a/src/Actions/ActionGetResponse.php b/src/Actions/ActionGetResponse.php index 0d86db0..49c3592 100644 --- a/src/Actions/ActionGetResponse.php +++ b/src/Actions/ActionGetResponse.php @@ -15,6 +15,9 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionGetResponse\PossibleValue + * @phpstan-import-type WebhookShape from \ModerationAPI\Actions\ActionGetResponse\Webhook + * * @phpstan-type ActionGetResponseShape = array{ * id: string, * builtIn: bool|null, @@ -22,14 +25,14 @@ * filterInQueueIDs: list, * freeText: bool, * name: string, - * position: value-of, - * possibleValues: list, - * queueBehaviour: value-of, + * position: Position|value-of, + * possibleValues: list, + * queueBehaviour: QueueBehaviour|value-of, * valueRequired: bool, - * webhooks: list, + * webhooks: list, * description?: string|null, * key?: string|null, - * type?: value-of|null, + * type?: null|Type|value-of, * } */ final class ActionGetResponse implements BaseModel @@ -182,15 +185,9 @@ public function __construct() * * @param list $filterInQueueIDs * @param Position|value-of $position - * @param list $possibleValues + * @param list $possibleValues * @param QueueBehaviour|value-of $queueBehaviour - * @param list $webhooks + * @param list $webhooks * @param Type|value-of|null $type */ public static function with( @@ -314,7 +311,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { @@ -352,13 +349,7 @@ public function withValueRequired(bool $valueRequired): self /** * The action's webhooks. * - * @param list $webhooks + * @param list $webhooks */ public function withWebhooks(array $webhooks): self { diff --git a/src/Actions/ActionListParams.php b/src/Actions/ActionListParams.php index 90b4be8..3d8b8f7 100644 --- a/src/Actions/ActionListParams.php +++ b/src/Actions/ActionListParams.php @@ -14,7 +14,7 @@ * * @see ModerationAPI\Services\ActionsService::list() * - * @phpstan-type ActionListParamsShape = array{queueID?: string} + * @phpstan-type ActionListParamsShape = array{queueID?: string|null} */ final class ActionListParams implements BaseModel { diff --git a/src/Actions/ActionListResponseItem.php b/src/Actions/ActionListResponseItem.php index b490486..25b1bda 100644 --- a/src/Actions/ActionListResponseItem.php +++ b/src/Actions/ActionListResponseItem.php @@ -15,6 +15,9 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionListResponseItem\PossibleValue + * @phpstan-import-type WebhookShape from \ModerationAPI\Actions\ActionListResponseItem\Webhook + * * @phpstan-type ActionListResponseItemShape = array{ * id: string, * builtIn: bool|null, @@ -22,14 +25,14 @@ * filterInQueueIDs: list, * freeText: bool, * name: string, - * position: value-of, - * possibleValues: list, - * queueBehaviour: value-of, + * position: Position|value-of, + * possibleValues: list, + * queueBehaviour: QueueBehaviour|value-of, * valueRequired: bool, - * webhooks: list, + * webhooks: list, * description?: string|null, * key?: string|null, - * type?: value-of|null, + * type?: null|Type|value-of, * } */ final class ActionListResponseItem implements BaseModel @@ -182,15 +185,9 @@ public function __construct() * * @param list $filterInQueueIDs * @param Position|value-of $position - * @param list $possibleValues + * @param list $possibleValues * @param QueueBehaviour|value-of $queueBehaviour - * @param list $webhooks + * @param list $webhooks * @param Type|value-of|null $type */ public static function with( @@ -314,7 +311,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { @@ -352,13 +349,7 @@ public function withValueRequired(bool $valueRequired): self /** * The action's webhooks. * - * @param list $webhooks + * @param list $webhooks */ public function withWebhooks(array $webhooks): self { diff --git a/src/Actions/ActionNewResponse.php b/src/Actions/ActionNewResponse.php index 616afab..27da17a 100644 --- a/src/Actions/ActionNewResponse.php +++ b/src/Actions/ActionNewResponse.php @@ -14,6 +14,8 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionNewResponse\PossibleValue + * * @phpstan-type ActionNewResponseShape = array{ * id: string, * builtIn: bool|null, @@ -21,13 +23,13 @@ * filterInQueueIDs: list, * freeText: bool, * name: string, - * position: value-of, - * possibleValues: list, - * queueBehaviour: value-of, + * position: Position|value-of, + * possibleValues: list, + * queueBehaviour: QueueBehaviour|value-of, * valueRequired: bool, * description?: string|null, * key?: string|null, - * type?: value-of|null, + * type?: null|Type|value-of, * } */ final class ActionNewResponse implements BaseModel @@ -170,7 +172,7 @@ public function __construct() * * @param list $filterInQueueIDs * @param Position|value-of $position - * @param list $possibleValues + * @param list $possibleValues * @param QueueBehaviour|value-of $queueBehaviour * @param Type|value-of|null $type */ @@ -293,7 +295,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { diff --git a/src/Actions/ActionUpdateParams.php b/src/Actions/ActionUpdateParams.php index 7fd58e3..87b835c 100644 --- a/src/Actions/ActionUpdateParams.php +++ b/src/Actions/ActionUpdateParams.php @@ -19,21 +19,22 @@ * * @see ModerationAPI\Services\ActionsService::update() * + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionUpdateParams\PossibleValue + * @phpstan-import-type WebhookShape from \ModerationAPI\Actions\ActionUpdateParams\Webhook + * * @phpstan-type ActionUpdateParamsShape = array{ * builtIn?: bool|null, * description?: string|null, - * filterInQueueIDs?: list, - * freeText?: bool, + * filterInQueueIDs?: list|null, + * freeText?: bool|null, * key?: string|null, - * name?: string, - * position?: Position|value-of, - * possibleValues?: list, - * queueBehaviour?: QueueBehaviour|value-of, + * name?: string|null, + * position?: null|Position|value-of, + * possibleValues?: list|null, + * queueBehaviour?: null|QueueBehaviour|value-of, * type?: null|Type|value-of, - * valueRequired?: bool, - * webhooks?: list, + * valueRequired?: bool|null, + * webhooks?: list|null, * } */ final class ActionUpdateParams implements BaseModel @@ -136,14 +137,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param list $filterInQueueIDs - * @param Position|value-of $position - * @param list $possibleValues - * @param QueueBehaviour|value-of $queueBehaviour + * @param list|null $filterInQueueIDs + * @param Position|value-of|null $position + * @param list|null $possibleValues + * @param QueueBehaviour|value-of|null $queueBehaviour * @param Type|value-of|null $type - * @param list $webhooks + * @param list|null $webhooks */ public static function with( ?bool $builtIn = null, @@ -261,7 +260,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { @@ -312,9 +311,7 @@ public function withValueRequired(bool $valueRequired): self /** * The action's webhooks. * - * @param list $webhooks + * @param list $webhooks */ public function withWebhooks(array $webhooks): self { diff --git a/src/Actions/ActionUpdateResponse.php b/src/Actions/ActionUpdateResponse.php index 9bb8c28..31c5fca 100644 --- a/src/Actions/ActionUpdateResponse.php +++ b/src/Actions/ActionUpdateResponse.php @@ -14,6 +14,8 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type PossibleValueShape from \ModerationAPI\Actions\ActionUpdateResponse\PossibleValue + * * @phpstan-type ActionUpdateResponseShape = array{ * id: string, * builtIn: bool|null, @@ -21,13 +23,13 @@ * filterInQueueIDs: list, * freeText: bool, * name: string, - * position: value-of, - * possibleValues: list, - * queueBehaviour: value-of, + * position: Position|value-of, + * possibleValues: list, + * queueBehaviour: QueueBehaviour|value-of, * valueRequired: bool, * description?: string|null, * key?: string|null, - * type?: value-of|null, + * type?: null|Type|value-of, * } */ final class ActionUpdateResponse implements BaseModel @@ -170,7 +172,7 @@ public function __construct() * * @param list $filterInQueueIDs * @param Position|value-of $position - * @param list $possibleValues + * @param list $possibleValues * @param QueueBehaviour|value-of $queueBehaviour * @param Type|value-of|null $type */ @@ -293,7 +295,7 @@ public function withPosition(Position|string $position): self /** * The possible values of the action. The user will be prompted to select one of these values when executing the action. * - * @param list $possibleValues + * @param list $possibleValues */ public function withPossibleValues(array $possibleValues): self { diff --git a/src/Actions/Execute/ExecuteExecuteByIDParams.php b/src/Actions/Execute/ExecuteExecuteByIDParams.php index d64792e..5eb7f61 100644 --- a/src/Actions/Execute/ExecuteExecuteByIDParams.php +++ b/src/Actions/Execute/ExecuteExecuteByIDParams.php @@ -16,10 +16,10 @@ * @see ModerationAPI\Services\Actions\ExecuteService::executeByID() * * @phpstan-type ExecuteExecuteByIDParamsShape = array{ - * authorIDs?: list, - * contentIDs?: list, - * queueID?: string, - * value?: string, + * authorIDs?: list|null, + * contentIDs?: list|null, + * queueID?: string|null, + * value?: string|null, * } */ final class ExecuteExecuteByIDParams implements BaseModel @@ -66,8 +66,8 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param list $authorIDs - * @param list $contentIDs + * @param list|null $authorIDs + * @param list|null $contentIDs */ public static function with( ?array $authorIDs = null, diff --git a/src/Actions/Execute/ExecuteExecuteParams.php b/src/Actions/Execute/ExecuteExecuteParams.php index 2073f29..debdf98 100644 --- a/src/Actions/Execute/ExecuteExecuteParams.php +++ b/src/Actions/Execute/ExecuteExecuteParams.php @@ -17,11 +17,11 @@ * * @phpstan-type ExecuteExecuteParamsShape = array{ * actionKey: string, - * authorIDs?: list, - * contentIDs?: list, - * duration?: float, - * queueID?: string, - * value?: string, + * authorIDs?: list|null, + * contentIDs?: list|null, + * duration?: float|null, + * queueID?: string|null, + * value?: string|null, * } */ final class ExecuteExecuteParams implements BaseModel @@ -94,8 +94,8 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param list $authorIDs - * @param list $contentIDs + * @param list|null $authorIDs + * @param list|null $contentIDs */ public static function with( string $actionKey, diff --git a/src/Authors/AuthorCreateParams.php b/src/Authors/AuthorCreateParams.php index 5956b1e..a9c34f4 100644 --- a/src/Authors/AuthorCreateParams.php +++ b/src/Authors/AuthorCreateParams.php @@ -16,19 +16,16 @@ * * @see ModerationAPI\Services\AuthorsService::create() * + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorCreateParams\Metadata + * * @phpstan-type AuthorCreateParamsShape = array{ * externalID: string, * email?: string|null, * externalLink?: string|null, - * firstSeen?: float, - * lastSeen?: float, + * firstSeen?: float|null, + * lastSeen?: float|null, * manualTrustLevel?: float|null, - * metadata?: Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * }, + * metadata?: null|Metadata|MetadataShape, * name?: string|null, * profilePicture?: string|null, * } @@ -114,12 +111,7 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape|null $metadata */ public static function with( string $externalID, @@ -214,12 +206,7 @@ public function withManualTrustLevel(?float $manualTrustLevel): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { diff --git a/src/Authors/AuthorGetResponse.php b/src/Authors/AuthorGetResponse.php index 482e8d6..d7fc74d 100644 --- a/src/Authors/AuthorGetResponse.php +++ b/src/Authors/AuthorGetResponse.php @@ -16,16 +16,22 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type BlockShape from \ModerationAPI\Authors\AuthorGetResponse\Block + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorGetResponse\Metadata + * @phpstan-import-type MetricsShape from \ModerationAPI\Authors\AuthorGetResponse\Metrics + * @phpstan-import-type RiskEvaluationShape from \ModerationAPI\Authors\AuthorGetResponse\RiskEvaluation + * @phpstan-import-type TrustLevelShape from \ModerationAPI\Authors\AuthorGetResponse\TrustLevel + * * @phpstan-type AuthorGetResponseShape = array{ * id: string, - * block: Block|null, + * block: null|Block|BlockShape, * firstSeen: float, * lastSeen: float, - * metadata: Metadata, - * metrics: Metrics, - * riskEvaluation: RiskEvaluation|null, - * status: value-of, - * trustLevel: TrustLevel, + * metadata: Metadata|MetadataShape, + * metrics: Metrics|MetricsShape, + * riskEvaluation: null|RiskEvaluation|RiskEvaluationShape, + * status: Status|value-of, + * trustLevel: TrustLevel|TrustLevelShape, * email?: string|null, * externalID?: string|null, * externalLink?: string|null, @@ -168,19 +174,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param Block|BlockShape|null $block + * @param Metadata|MetadataShape $metadata + * @param Metrics|MetricsShape $metrics + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation * @param Status|value-of $status - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public static function with( string $id, @@ -235,7 +234,7 @@ public function withID(string $id): self /** * Block or suspension details, if applicable. Null if the author is enabled. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block + * @param Block|BlockShape|null $block */ public function withBlock(Block|array|null $block): self { @@ -270,12 +269,7 @@ public function withLastSeen(float $lastSeen): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { @@ -286,9 +280,7 @@ public function withMetadata(Metadata|array $metadata): self } /** - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics + * @param Metrics|MetricsShape $metrics */ public function withMetrics(Metrics|array $metrics): self { @@ -301,7 +293,7 @@ public function withMetrics(Metrics|array $metrics): self /** * Risk assessment details, if available. * - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation */ public function withRiskEvaluation( RiskEvaluation|array|null $riskEvaluation @@ -326,7 +318,7 @@ public function withStatus(Status|string $status): self } /** - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public function withTrustLevel(TrustLevel|array $trustLevel): self { diff --git a/src/Authors/AuthorListParams.php b/src/Authors/AuthorListParams.php index f8717de..49cc775 100644 --- a/src/Authors/AuthorListParams.php +++ b/src/Authors/AuthorListParams.php @@ -17,13 +17,13 @@ * @see ModerationAPI\Services\AuthorsService::list() * * @phpstan-type AuthorListParamsShape = array{ - * contentTypes?: string, - * lastActiveDate?: string, - * memberSinceDate?: string, - * pageNumber?: float, - * pageSize?: float, - * sortBy?: SortBy|value-of, - * sortDirection?: SortDirection|value-of, + * contentTypes?: string|null, + * lastActiveDate?: string|null, + * memberSinceDate?: string|null, + * pageNumber?: float|null, + * pageSize?: float|null, + * sortBy?: null|SortBy|value-of, + * sortDirection?: null|SortDirection|value-of, * } */ final class AuthorListParams implements BaseModel @@ -75,8 +75,8 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param SortBy|value-of $sortBy - * @param SortDirection|value-of $sortDirection + * @param SortBy|value-of|null $sortBy + * @param SortDirection|value-of|null $sortDirection */ public static function with( ?string $contentTypes = null, diff --git a/src/Authors/AuthorListResponse.php b/src/Authors/AuthorListResponse.php index 0097476..d0b6a97 100644 --- a/src/Authors/AuthorListResponse.php +++ b/src/Authors/AuthorListResponse.php @@ -5,20 +5,17 @@ namespace ModerationAPI\Authors; use ModerationAPI\Authors\AuthorListResponse\Author; -use ModerationAPI\Authors\AuthorListResponse\Author\Block; -use ModerationAPI\Authors\AuthorListResponse\Author\Metadata; -use ModerationAPI\Authors\AuthorListResponse\Author\Metrics; -use ModerationAPI\Authors\AuthorListResponse\Author\RiskEvaluation; -use ModerationAPI\Authors\AuthorListResponse\Author\Status; -use ModerationAPI\Authors\AuthorListResponse\Author\TrustLevel; use ModerationAPI\Authors\AuthorListResponse\Pagination; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type AuthorShape from \ModerationAPI\Authors\AuthorListResponse\Author + * @phpstan-import-type PaginationShape from \ModerationAPI\Authors\AuthorListResponse\Pagination + * * @phpstan-type AuthorListResponseShape = array{ - * authors: list, pagination: Pagination + * authors: list, pagination: Pagination|PaginationShape * } */ final class AuthorListResponse implements BaseModel @@ -57,30 +54,8 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param list, - * trustLevel: TrustLevel, - * email?: string|null, - * externalID?: string|null, - * externalLink?: string|null, - * lastIncident?: float|null, - * name?: string|null, - * profilePicture?: string|null, - * }> $authors - * @param Pagination|array{ - * hasNextPage: bool, - * hasPreviousPage: bool, - * pageNumber: float, - * pageSize: float, - * total: float, - * } $pagination + * @param list $authors + * @param Pagination|PaginationShape $pagination */ public static function with( array $authors, @@ -95,23 +70,7 @@ public static function with( } /** - * @param list, - * trustLevel: TrustLevel, - * email?: string|null, - * externalID?: string|null, - * externalLink?: string|null, - * lastIncident?: float|null, - * name?: string|null, - * profilePicture?: string|null, - * }> $authors + * @param list $authors */ public function withAuthors(array $authors): self { @@ -122,13 +81,7 @@ public function withAuthors(array $authors): self } /** - * @param Pagination|array{ - * hasNextPage: bool, - * hasPreviousPage: bool, - * pageNumber: float, - * pageSize: float, - * total: float, - * } $pagination + * @param Pagination|PaginationShape $pagination */ public function withPagination(Pagination|array $pagination): self { diff --git a/src/Authors/AuthorListResponse/Author.php b/src/Authors/AuthorListResponse/Author.php index 3b7a556..8f8c4eb 100644 --- a/src/Authors/AuthorListResponse/Author.php +++ b/src/Authors/AuthorListResponse/Author.php @@ -16,16 +16,22 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type BlockShape from \ModerationAPI\Authors\AuthorListResponse\Author\Block + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorListResponse\Author\Metadata + * @phpstan-import-type MetricsShape from \ModerationAPI\Authors\AuthorListResponse\Author\Metrics + * @phpstan-import-type RiskEvaluationShape from \ModerationAPI\Authors\AuthorListResponse\Author\RiskEvaluation + * @phpstan-import-type TrustLevelShape from \ModerationAPI\Authors\AuthorListResponse\Author\TrustLevel + * * @phpstan-type AuthorShape = array{ * id: string, - * block: Block|null, + * block: null|Block|BlockShape, * firstSeen: float, * lastSeen: float, - * metadata: Metadata, - * metrics: Metrics, - * riskEvaluation: RiskEvaluation|null, - * status: value-of, - * trustLevel: TrustLevel, + * metadata: Metadata|MetadataShape, + * metrics: Metrics|MetricsShape, + * riskEvaluation: null|RiskEvaluation|RiskEvaluationShape, + * status: Status|value-of, + * trustLevel: TrustLevel|TrustLevelShape, * email?: string|null, * externalID?: string|null, * externalLink?: string|null, @@ -168,19 +174,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param Block|BlockShape|null $block + * @param Metadata|MetadataShape $metadata + * @param Metrics|MetricsShape $metrics + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation * @param Status|value-of $status - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public static function with( string $id, @@ -235,7 +234,7 @@ public function withID(string $id): self /** * Block or suspension details, if applicable. Null if the author is enabled. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block + * @param Block|BlockShape|null $block */ public function withBlock(Block|array|null $block): self { @@ -270,12 +269,7 @@ public function withLastSeen(float $lastSeen): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { @@ -286,9 +280,7 @@ public function withMetadata(Metadata|array $metadata): self } /** - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics + * @param Metrics|MetricsShape $metrics */ public function withMetrics(Metrics|array $metrics): self { @@ -301,7 +293,7 @@ public function withMetrics(Metrics|array $metrics): self /** * Risk assessment details, if available. * - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation */ public function withRiskEvaluation( RiskEvaluation|array|null $riskEvaluation @@ -326,7 +318,7 @@ public function withStatus(Status|string $status): self } /** - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public function withTrustLevel(TrustLevel|array $trustLevel): self { diff --git a/src/Authors/AuthorNewResponse.php b/src/Authors/AuthorNewResponse.php index 7accc08..f4f4c4e 100644 --- a/src/Authors/AuthorNewResponse.php +++ b/src/Authors/AuthorNewResponse.php @@ -16,16 +16,22 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type BlockShape from \ModerationAPI\Authors\AuthorNewResponse\Block + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorNewResponse\Metadata + * @phpstan-import-type MetricsShape from \ModerationAPI\Authors\AuthorNewResponse\Metrics + * @phpstan-import-type RiskEvaluationShape from \ModerationAPI\Authors\AuthorNewResponse\RiskEvaluation + * @phpstan-import-type TrustLevelShape from \ModerationAPI\Authors\AuthorNewResponse\TrustLevel + * * @phpstan-type AuthorNewResponseShape = array{ * id: string, - * block: Block|null, + * block: null|Block|BlockShape, * firstSeen: float, * lastSeen: float, - * metadata: Metadata, - * metrics: Metrics, - * riskEvaluation: RiskEvaluation|null, - * status: value-of, - * trustLevel: TrustLevel, + * metadata: Metadata|MetadataShape, + * metrics: Metrics|MetricsShape, + * riskEvaluation: null|RiskEvaluation|RiskEvaluationShape, + * status: Status|value-of, + * trustLevel: TrustLevel|TrustLevelShape, * email?: string|null, * externalID?: string|null, * externalLink?: string|null, @@ -168,19 +174,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param Block|BlockShape|null $block + * @param Metadata|MetadataShape $metadata + * @param Metrics|MetricsShape $metrics + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation * @param Status|value-of $status - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public static function with( string $id, @@ -235,7 +234,7 @@ public function withID(string $id): self /** * Block or suspension details, if applicable. Null if the author is enabled. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block + * @param Block|BlockShape|null $block */ public function withBlock(Block|array|null $block): self { @@ -270,12 +269,7 @@ public function withLastSeen(float $lastSeen): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { @@ -286,9 +280,7 @@ public function withMetadata(Metadata|array $metadata): self } /** - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics + * @param Metrics|MetricsShape $metrics */ public function withMetrics(Metrics|array $metrics): self { @@ -301,7 +293,7 @@ public function withMetrics(Metrics|array $metrics): self /** * Risk assessment details, if available. * - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation */ public function withRiskEvaluation( RiskEvaluation|array|null $riskEvaluation @@ -326,7 +318,7 @@ public function withStatus(Status|string $status): self } /** - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public function withTrustLevel(TrustLevel|array $trustLevel): self { diff --git a/src/Authors/AuthorUpdateParams.php b/src/Authors/AuthorUpdateParams.php index 63c65d1..1214284 100644 --- a/src/Authors/AuthorUpdateParams.php +++ b/src/Authors/AuthorUpdateParams.php @@ -15,18 +15,15 @@ * * @see ModerationAPI\Services\AuthorsService::update() * + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorUpdateParams\Metadata + * * @phpstan-type AuthorUpdateParamsShape = array{ * email?: string|null, * externalLink?: string|null, - * firstSeen?: float, - * lastSeen?: float, + * firstSeen?: float|null, + * lastSeen?: float|null, * manualTrustLevel?: float|null, - * metadata?: Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * }, + * metadata?: null|Metadata|MetadataShape, * name?: string|null, * profilePicture?: string|null, * } @@ -92,12 +89,7 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape|null $metadata */ public static function with( ?string $email = null, @@ -178,12 +170,7 @@ public function withManualTrustLevel(?float $manualTrustLevel): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { diff --git a/src/Authors/AuthorUpdateResponse.php b/src/Authors/AuthorUpdateResponse.php index 552a3f2..137b439 100644 --- a/src/Authors/AuthorUpdateResponse.php +++ b/src/Authors/AuthorUpdateResponse.php @@ -16,16 +16,22 @@ use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type BlockShape from \ModerationAPI\Authors\AuthorUpdateResponse\Block + * @phpstan-import-type MetadataShape from \ModerationAPI\Authors\AuthorUpdateResponse\Metadata + * @phpstan-import-type MetricsShape from \ModerationAPI\Authors\AuthorUpdateResponse\Metrics + * @phpstan-import-type RiskEvaluationShape from \ModerationAPI\Authors\AuthorUpdateResponse\RiskEvaluation + * @phpstan-import-type TrustLevelShape from \ModerationAPI\Authors\AuthorUpdateResponse\TrustLevel + * * @phpstan-type AuthorUpdateResponseShape = array{ * id: string, - * block: Block|null, + * block: null|Block|BlockShape, * firstSeen: float, * lastSeen: float, - * metadata: Metadata, - * metrics: Metrics, - * riskEvaluation: RiskEvaluation|null, - * status: value-of, - * trustLevel: TrustLevel, + * metadata: Metadata|MetadataShape, + * metrics: Metrics|MetricsShape, + * riskEvaluation: null|RiskEvaluation|RiskEvaluationShape, + * status: Status|value-of, + * trustLevel: TrustLevel|TrustLevelShape, * email?: string|null, * externalID?: string|null, * externalLink?: string|null, @@ -168,19 +174,12 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param Block|BlockShape|null $block + * @param Metadata|MetadataShape $metadata + * @param Metrics|MetricsShape $metrics + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation * @param Status|value-of $status - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public static function with( string $id, @@ -235,7 +234,7 @@ public function withID(string $id): self /** * Block or suspension details, if applicable. Null if the author is enabled. * - * @param Block|array{reason?: string|null, until?: float|null}|null $block + * @param Block|BlockShape|null $block */ public function withBlock(Block|array|null $block): self { @@ -270,12 +269,7 @@ public function withLastSeen(float $lastSeen): self /** * Additional metadata provided by your system. We recommend including any relevant information that may assist in the moderation process. * - * @param Metadata|array{ - * emailVerified?: bool|null, - * identityVerified?: bool|null, - * isPayingCustomer?: bool|null, - * phoneVerified?: bool|null, - * } $metadata + * @param Metadata|MetadataShape $metadata */ public function withMetadata(Metadata|array $metadata): self { @@ -286,9 +280,7 @@ public function withMetadata(Metadata|array $metadata): self } /** - * @param Metrics|array{ - * flaggedContent: float, totalContent: float, averageSentiment?: float|null - * } $metrics + * @param Metrics|MetricsShape $metrics */ public function withMetrics(Metrics|array $metrics): self { @@ -301,7 +293,7 @@ public function withMetrics(Metrics|array $metrics): self /** * Risk assessment details, if available. * - * @param RiskEvaluation|array{riskLevel?: float|null}|null $riskEvaluation + * @param RiskEvaluation|RiskEvaluationShape|null $riskEvaluation */ public function withRiskEvaluation( RiskEvaluation|array|null $riskEvaluation @@ -326,7 +318,7 @@ public function withStatus(Status|string $status): self } /** - * @param TrustLevel|array{level: float, manual: bool} $trustLevel + * @param TrustLevel|TrustLevelShape $trustLevel */ public function withTrustLevel(TrustLevel|array $trustLevel): self { diff --git a/src/Client.php b/src/Client.php index be2f97b..2930653 100644 --- a/src/Client.php +++ b/src/Client.php @@ -7,6 +7,7 @@ use Http\Discovery\Psr17FactoryDiscovery; use Http\Discovery\Psr18ClientDiscovery; use ModerationAPI\Core\BaseClient; +use ModerationAPI\Core\Util; use ModerationAPI\Services\AccountService; use ModerationAPI\Services\ActionsService; use ModerationAPI\Services\AuthorsService; @@ -15,6 +16,10 @@ use ModerationAPI\Services\QueueService; use ModerationAPI\Services\WordlistService; +/** + * @phpstan-import-type NormalizedRequest from \ModerationAPI\Core\BaseClient + * @phpstan-import-type RequestOpts from \ModerationAPI\RequestOptions + */ class Client extends BaseClient { public string $secretKey; @@ -54,37 +59,44 @@ class Client extends BaseClient */ public WordlistService $wordlist; - public function __construct(?string $secretKey = null, ?string $baseUrl = null) - { + /** + * @param RequestOpts|null $requestOptions + */ + public function __construct( + ?string $secretKey = null, + ?string $baseUrl = null, + RequestOptions|array|null $requestOptions = null, + ) { $this->secretKey = (string) ($secretKey ?? getenv('MODAPI_SECRET_KEY')); $baseUrl ??= getenv( 'MODERATION_API_BASE_URL' ) ?: 'https://api.moderationapi.com/v1'; - $options = RequestOptions::with( - uriFactory: Psr17FactoryDiscovery::findUriFactory(), - streamFactory: Psr17FactoryDiscovery::findStreamFactory(), - requestFactory: Psr17FactoryDiscovery::findRequestFactory(), - transporter: Psr18ClientDiscovery::find(), + $options = RequestOptions::parse( + RequestOptions::with( + uriFactory: Psr17FactoryDiscovery::findUriFactory(), + streamFactory: Psr17FactoryDiscovery::findStreamFactory(), + requestFactory: Psr17FactoryDiscovery::findRequestFactory(), + transporter: Psr18ClientDiscovery::find(), + ), + $requestOptions, ); parent::__construct( - // x-release-please-start-version headers: [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', - 'User-Agent' => sprintf('moderation-api/PHP %s', '0.3.0'), + 'User-Agent' => sprintf('moderation-api/PHP %s', VERSION), 'X-Stainless-Lang' => 'php', 'X-Stainless-Package-Version' => '0.3.0', - 'X-Stainless-OS' => $this->getNormalizedOS(), - 'X-Stainless-Arch' => $this->getNormalizedArchitecture(), - 'X-Stainless-Runtime' => 'php', + 'X-Stainless-Arch' => Util::machtype(), + 'X-Stainless-OS' => Util::ostype(), + 'X-Stainless-Runtime' => php_sapi_name(), 'X-Stainless-Runtime-Version' => phpversion(), ], - // x-release-please-end baseUrl: $baseUrl, - options: $options, + options: $options ); $this->authors = new AuthorsService($this); @@ -103,4 +115,32 @@ protected function authHeaders(): array 'Authorization' => "Bearer {$this->secretKey}", ] : []; } + + /** + * @internal + * + * @param string|list $path + * @param array $query + * @param array|null> $headers + * @param RequestOpts|null $opts + * + * @return array{NormalizedRequest, RequestOptions} + */ + protected function buildRequest( + string $method, + string|array $path, + array $query, + array $headers, + mixed $body, + RequestOptions|array|null $opts, + ): array { + return parent::buildRequest( + method: $method, + path: $path, + query: $query, + headers: [...$this->authHeaders(), ...$headers], + body: $body, + opts: $opts, + ); + } } diff --git a/src/Content/ContentSubmitParams.php b/src/Content/ContentSubmitParams.php index 201a7f6..58dccb5 100644 --- a/src/Content/ContentSubmitParams.php +++ b/src/Content/ContentSubmitParams.php @@ -6,35 +6,11 @@ use ModerationAPI\Content\ContentSubmitParams\Content\Audio; use ModerationAPI\Content\ContentSubmitParams\Content\Image; -use ModerationAPI\Content\ContentSubmitParams\Content\Object1; +use ModerationAPI\Content\ContentSubmitParams\Content\Object_; use ModerationAPI\Content\ContentSubmitParams\Content\Text; use ModerationAPI\Content\ContentSubmitParams\Content\Video; use ModerationAPI\Content\ContentSubmitParams\MetaType; use ModerationAPI\Content\ContentSubmitParams\Policy; -use ModerationAPI\Content\ContentSubmitParams\Policy\CodeAbuse; -use ModerationAPI\Content\ContentSubmitParams\Policy\Flirtation; -use ModerationAPI\Content\ContentSubmitParams\Policy\Guideline; -use ModerationAPI\Content\ContentSubmitParams\Policy\Hate; -use ModerationAPI\Content\ContentSubmitParams\Policy\Illicit; -use ModerationAPI\Content\ContentSubmitParams\Policy\IllicitAlcohol; -use ModerationAPI\Content\ContentSubmitParams\Policy\IllicitDrugs; -use ModerationAPI\Content\ContentSubmitParams\Policy\IllicitFirearms; -use ModerationAPI\Content\ContentSubmitParams\Policy\IllicitGambling; -use ModerationAPI\Content\ContentSubmitParams\Policy\IllicitTobacco; -use ModerationAPI\Content\ContentSubmitParams\Policy\PersonalInformation; -use ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking; -use ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking\Entity; -use ModerationAPI\Content\ContentSubmitParams\Policy\Political; -use ModerationAPI\Content\ContentSubmitParams\Policy\Profanity; -use ModerationAPI\Content\ContentSubmitParams\Policy\Religion; -use ModerationAPI\Content\ContentSubmitParams\Policy\SelfHarm; -use ModerationAPI\Content\ContentSubmitParams\Policy\SelfPromotion; -use ModerationAPI\Content\ContentSubmitParams\Policy\Sexual; -use ModerationAPI\Content\ContentSubmitParams\Policy\Spam; -use ModerationAPI\Content\ContentSubmitParams\Policy\Toxicity; -use ModerationAPI\Content\ContentSubmitParams\Policy\ToxicitySevere; -use ModerationAPI\Content\ContentSubmitParams\Policy\URLMasking; -use ModerationAPI\Content\ContentSubmitParams\Policy\Violence; use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; @@ -44,54 +20,22 @@ /** * @see ModerationAPI\Services\ContentService::submit() * + * @phpstan-import-type ContentVariants from \ModerationAPI\Content\ContentSubmitParams\Content + * @phpstan-import-type PolicyVariants from \ModerationAPI\Content\ContentSubmitParams\Policy + * @phpstan-import-type ContentShape from \ModerationAPI\Content\ContentSubmitParams\Content + * @phpstan-import-type PolicyShape from \ModerationAPI\Content\ContentSubmitParams\Policy + * * @phpstan-type ContentSubmitParamsShape = array{ - * content: Text|array{text: string, type?: 'text'}|Image|array{ - * type?: 'image', url: string - * }|Video|array{type?: 'video', url: string}|Audio|array{ - * type?: 'audio', url: string - * }|Object1|array{ - * data: array, - * type?: 'object', - * }, - * authorID?: string, - * channel?: string, - * contentID?: string, - * conversationID?: string, - * doNotStore?: bool, - * metadata?: array, - * metaType?: MetaType|value-of, - * policies?: list - * }|URLMasking|array{ - * id?: 'url', - * entities: array, - * }|Guideline|array{ - * id?: 'guideline', flag: bool, guidelineKey: string, instructions: string - * }>, + * content: ContentShape, + * authorID?: string|null, + * channel?: string|null, + * contentID?: string|null, + * conversationID?: string|null, + * doNotStore?: bool|null, + * metadata?: array|null, + * metaType?: null|MetaType|value-of, + * policies?: list|null, + * timestamp?: float|null, * } */ final class ContentSubmitParams implements BaseModel @@ -102,9 +46,11 @@ final class ContentSubmitParams implements BaseModel /** * The content sent for moderation. + * + * @var ContentVariants $content */ #[Required] - public Text|Image|Video|Audio|Object1 $content; + public Text|Image|Video|Audio|Object_ $content; /** * The author of the content. @@ -155,11 +101,17 @@ final class ContentSubmitParams implements BaseModel /** * (Enterprise) override the channel policies for this moderation request only. * - * @var list|null $policies + * @var list|null $policies */ #[Optional(list: Policy::class)] public ?array $policies; + /** + * Unix timestamp (in milliseconds) of when the content was created. Use if content is not submitted in real-time. + */ + #[Optional] + public ?float $timestamp; + /** * `new ContentSubmitParams()` is missing required properties by the API. * @@ -184,51 +136,13 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Text|array{text: string, type?: 'text'}|Image|array{ - * type?: 'image', url: string - * }|Video|array{type?: 'video', url: string}|Audio|array{ - * type?: 'audio', url: string - * }|Object1|array{ - * data: array, - * type?: 'object', - * } $content - * @param array $metadata - * @param MetaType|value-of $metaType - * @param list - * }|URLMasking|array{ - * id?: 'url', - * entities: array, - * }|Guideline|array{ - * id?: 'guideline', flag: bool, guidelineKey: string, instructions: string - * }> $policies + * @param ContentShape $content + * @param array|null $metadata + * @param MetaType|value-of|null $metaType + * @param list|null $policies */ public static function with( - Text|array|Image|Video|Audio|Object1 $content, + Text|array|Image|Video|Audio|Object_ $content, ?string $authorID = null, ?string $channel = null, ?string $contentID = null, @@ -237,6 +151,7 @@ public static function with( ?array $metadata = null, MetaType|string|null $metaType = null, ?array $policies = null, + ?float $timestamp = null, ): self { $self = new self; @@ -250,6 +165,7 @@ public static function with( null !== $metadata && $self['metadata'] = $metadata; null !== $metaType && $self['metaType'] = $metaType; null !== $policies && $self['policies'] = $policies; + null !== $timestamp && $self['timestamp'] = $timestamp; return $self; } @@ -257,17 +173,10 @@ public static function with( /** * The content sent for moderation. * - * @param Text|array{text: string, type?: 'text'}|Image|array{ - * type?: 'image', url: string - * }|Video|array{type?: 'video', url: string}|Audio|array{ - * type?: 'audio', url: string - * }|Object1|array{ - * data: array, - * type?: 'object', - * } $content + * @param ContentShape $content */ public function withContent( - Text|array|Image|Video|Audio|Object1 $content + Text|array|Image|Video|Audio|Object_ $content ): self { $self = clone $this; $self['content'] = $content; @@ -359,38 +268,7 @@ public function withMetaType(MetaType|string $metaType): self /** * (Enterprise) override the channel policies for this moderation request only. * - * @param list - * }|URLMasking|array{ - * id?: 'url', - * entities: array, - * }|Guideline|array{ - * id?: 'guideline', flag: bool, guidelineKey: string, instructions: string - * }> $policies + * @param list $policies */ public function withPolicies(array $policies): self { @@ -399,4 +277,15 @@ public function withPolicies(array $policies): self return $self; } + + /** + * Unix timestamp (in milliseconds) of when the content was created. Use if content is not submitted in real-time. + */ + public function withTimestamp(float $timestamp): self + { + $self = clone $this; + $self['timestamp'] = $timestamp; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Content.php b/src/Content/ContentSubmitParams/Content.php index b7c1205..4479679 100644 --- a/src/Content/ContentSubmitParams/Content.php +++ b/src/Content/ContentSubmitParams/Content.php @@ -6,7 +6,7 @@ use ModerationAPI\Content\ContentSubmitParams\Content\Audio; use ModerationAPI\Content\ContentSubmitParams\Content\Image; -use ModerationAPI\Content\ContentSubmitParams\Content\Object1; +use ModerationAPI\Content\ContentSubmitParams\Content\Object_; use ModerationAPI\Content\ContentSubmitParams\Content\Text; use ModerationAPI\Content\ContentSubmitParams\Content\Video; use ModerationAPI\Core\Concerns\SdkUnion; @@ -15,6 +15,15 @@ /** * The content sent for moderation. + * + * @phpstan-import-type TextShape from \ModerationAPI\Content\ContentSubmitParams\Content\Text + * @phpstan-import-type ImageShape from \ModerationAPI\Content\ContentSubmitParams\Content\Image + * @phpstan-import-type VideoShape from \ModerationAPI\Content\ContentSubmitParams\Content\Video + * @phpstan-import-type AudioShape from \ModerationAPI\Content\ContentSubmitParams\Content\Audio + * @phpstan-import-type ObjectShape from \ModerationAPI\Content\ContentSubmitParams\Content\Object_ + * + * @phpstan-type ContentVariants = Text|Image|Video|Audio|Object_ + * @phpstan-type ContentShape = ContentVariants|TextShape|ImageShape|VideoShape|AudioShape|ObjectShape */ final class Content implements ConverterSource { @@ -26,7 +35,7 @@ final class Content implements ConverterSource public static function variants(): array { return [ - Text::class, Image::class, Video::class, Audio::class, Object1::class, + Text::class, Image::class, Video::class, Audio::class, Object_::class, ]; } } diff --git a/src/Content/ContentSubmitParams/Content/Audio.php b/src/Content/ContentSubmitParams/Content/Audio.php index 6771041..6157ca5 100644 --- a/src/Content/ContentSubmitParams/Content/Audio.php +++ b/src/Content/ContentSubmitParams/Content/Audio.php @@ -11,7 +11,7 @@ /** * Audio. * - * @phpstan-type AudioShape = array{type?: 'audio', url: string} + * @phpstan-type AudioShape = array{type: 'audio', url: string} */ final class Audio implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'audio' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * The URL of the audio content. */ diff --git a/src/Content/ContentSubmitParams/Content/Image.php b/src/Content/ContentSubmitParams/Content/Image.php index 86124e4..756abdd 100644 --- a/src/Content/ContentSubmitParams/Content/Image.php +++ b/src/Content/ContentSubmitParams/Content/Image.php @@ -11,7 +11,7 @@ /** * Image. * - * @phpstan-type ImageShape = array{type?: 'image', url: string} + * @phpstan-type ImageShape = array{type: 'image', url: string} */ final class Image implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'image' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * A public URL of the image content. */ diff --git a/src/Content/ContentSubmitParams/Content/Object1.php b/src/Content/ContentSubmitParams/Content/Object1.php deleted file mode 100644 index a827ee7..0000000 --- a/src/Content/ContentSubmitParams/Content/Object1.php +++ /dev/null @@ -1,104 +0,0 @@ -, - * type?: 'object', - * } - */ -final class Object1 implements BaseModel -{ - /** @use SdkModel */ - use SdkModel; - - /** @var 'object' $type */ - #[Required] - public string $type = 'object'; - - /** - * Values in the object. Can be mixed content types. - * - * @var array $data - */ - #[Required(map: Data::class)] - public array $data; - - /** - * `new Object1()` is missing required properties by the API. - * - * To enforce required parameters use - * ``` - * Object1::with(data: ...) - * ``` - * - * Otherwise ensure the following setters are called - * - * ``` - * (new Object1)->withData(...) - * ``` - */ - public function __construct() - { - $this->initialize(); - } - - /** - * Construct an instance from the required parameters. - * - * You must use named parameters to construct any parameters with a default value. - * - * @param array $data - */ - public static function with(array $data): self - { - $self = new self; - - $self['data'] = $data; - - return $self; - } - - /** - * Values in the object. Can be mixed content types. - * - * @param array $data - */ - public function withData(array $data): self - { - $self = clone $this; - $self['data'] = $data; - - return $self; - } -} diff --git a/src/Content/ContentSubmitParams/Content/Object1/Data.php b/src/Content/ContentSubmitParams/Content/Object1/Data.php deleted file mode 100644 index 48dd866..0000000 --- a/src/Content/ContentSubmitParams/Content/Object1/Data.php +++ /dev/null @@ -1,29 +0,0 @@ -|array - */ - public static function variants(): array - { - return [Text::class, Image::class, Video::class, Audio::class]; - } -} diff --git a/src/Content/ContentSubmitParams/Content/Object_.php b/src/Content/ContentSubmitParams/Content/Object_.php new file mode 100644 index 0000000..13ae267 --- /dev/null +++ b/src/Content/ContentSubmitParams/Content/Object_.php @@ -0,0 +1,95 @@ +, type: 'object'} + */ +final class Object_ implements BaseModel +{ + /** @use SdkModel */ + use SdkModel; + + /** @var 'object' $type */ + #[Required] + public string $type = 'object'; + + /** + * Values in the object. Can be mixed content types. + * + * @var array $data + */ + #[Required(map: Data::class)] + public array $data; + + /** + * `new Object_()` is missing required properties by the API. + * + * To enforce required parameters use + * ``` + * Object_::with(data: ...) + * ``` + * + * Otherwise ensure the following setters are called + * + * ``` + * (new Object_)->withData(...) + * ``` + */ + public function __construct() + { + $this->initialize(); + } + + /** + * Construct an instance from the required parameters. + * + * You must use named parameters to construct any parameters with a default value. + * + * @param array $data + */ + public static function with(array $data): self + { + $self = new self; + + $self['data'] = $data; + + return $self; + } + + /** + * Values in the object. Can be mixed content types. + * + * @param array $data + */ + public function withData(array $data): self + { + $self = clone $this; + $self['data'] = $data; + + return $self; + } + + /** + * @param 'object' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } +} diff --git a/src/Content/ContentSubmitParams/Content/Object_/Data.php b/src/Content/ContentSubmitParams/Content/Object_/Data.php new file mode 100644 index 0000000..60213ef --- /dev/null +++ b/src/Content/ContentSubmitParams/Content/Object_/Data.php @@ -0,0 +1,37 @@ +|array + */ + public static function variants(): array + { + return [Text::class, Image::class, Video::class, Audio::class]; + } +} diff --git a/src/Content/ContentSubmitParams/Content/Object1/Data/Audio.php b/src/Content/ContentSubmitParams/Content/Object_/Data/Audio.php similarity index 84% rename from src/Content/ContentSubmitParams/Content/Object1/Data/Audio.php rename to src/Content/ContentSubmitParams/Content/Object_/Data/Audio.php index f354cba..6acaa67 100644 --- a/src/Content/ContentSubmitParams/Content/Object1/Data/Audio.php +++ b/src/Content/ContentSubmitParams/Content/Object_/Data/Audio.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace ModerationAPI\Content\ContentSubmitParams\Content\Object1\Data; +namespace ModerationAPI\Content\ContentSubmitParams\Content\Object_\Data; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; @@ -11,7 +11,7 @@ /** * Audio. * - * @phpstan-type AudioShape = array{type?: 'audio', url: string} + * @phpstan-type AudioShape = array{type: 'audio', url: string} */ final class Audio implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'audio' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * The URL of the audio content. */ diff --git a/src/Content/ContentSubmitParams/Content/Object1/Data/Image.php b/src/Content/ContentSubmitParams/Content/Object_/Data/Image.php similarity index 84% rename from src/Content/ContentSubmitParams/Content/Object1/Data/Image.php rename to src/Content/ContentSubmitParams/Content/Object_/Data/Image.php index f2f26bb..699ed70 100644 --- a/src/Content/ContentSubmitParams/Content/Object1/Data/Image.php +++ b/src/Content/ContentSubmitParams/Content/Object_/Data/Image.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace ModerationAPI\Content\ContentSubmitParams\Content\Object1\Data; +namespace ModerationAPI\Content\ContentSubmitParams\Content\Object_\Data; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; @@ -11,7 +11,7 @@ /** * Image. * - * @phpstan-type ImageShape = array{type?: 'image', url: string} + * @phpstan-type ImageShape = array{type: 'image', url: string} */ final class Image implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'image' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * A public URL of the image content. */ diff --git a/src/Content/ContentSubmitParams/Content/Object1/Data/Text.php b/src/Content/ContentSubmitParams/Content/Object_/Data/Text.php similarity index 84% rename from src/Content/ContentSubmitParams/Content/Object1/Data/Text.php rename to src/Content/ContentSubmitParams/Content/Object_/Data/Text.php index 4ae5447..c101207 100644 --- a/src/Content/ContentSubmitParams/Content/Object1/Data/Text.php +++ b/src/Content/ContentSubmitParams/Content/Object_/Data/Text.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace ModerationAPI\Content\ContentSubmitParams\Content\Object1\Data; +namespace ModerationAPI\Content\ContentSubmitParams\Content\Object_\Data; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; @@ -11,7 +11,7 @@ /** * Text. * - * @phpstan-type TextShape = array{text: string, type?: 'text'} + * @phpstan-type TextShape = array{text: string, type: 'text'} */ final class Text implements BaseModel { @@ -71,4 +71,15 @@ public function withText(string $text): self return $self; } + + /** + * @param 'text' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Content/Object1/Data/Video.php b/src/Content/ContentSubmitParams/Content/Object_/Data/Video.php similarity index 84% rename from src/Content/ContentSubmitParams/Content/Object1/Data/Video.php rename to src/Content/ContentSubmitParams/Content/Object_/Data/Video.php index a32009d..08b3843 100644 --- a/src/Content/ContentSubmitParams/Content/Object1/Data/Video.php +++ b/src/Content/ContentSubmitParams/Content/Object_/Data/Video.php @@ -2,7 +2,7 @@ declare(strict_types=1); -namespace ModerationAPI\Content\ContentSubmitParams\Content\Object1\Data; +namespace ModerationAPI\Content\ContentSubmitParams\Content\Object_\Data; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; @@ -11,7 +11,7 @@ /** * Video. * - * @phpstan-type VideoShape = array{type?: 'video', url: string} + * @phpstan-type VideoShape = array{type: 'video', url: string} */ final class Video implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'video' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * A public URL of the video content. */ diff --git a/src/Content/ContentSubmitParams/Content/Text.php b/src/Content/ContentSubmitParams/Content/Text.php index 43406b3..aa90a9c 100644 --- a/src/Content/ContentSubmitParams/Content/Text.php +++ b/src/Content/ContentSubmitParams/Content/Text.php @@ -11,7 +11,7 @@ /** * Text. * - * @phpstan-type TextShape = array{text: string, type?: 'text'} + * @phpstan-type TextShape = array{text: string, type: 'text'} */ final class Text implements BaseModel { @@ -71,4 +71,15 @@ public function withText(string $text): self return $self; } + + /** + * @param 'text' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Content/Video.php b/src/Content/ContentSubmitParams/Content/Video.php index 6bb5dc5..20716bb 100644 --- a/src/Content/ContentSubmitParams/Content/Video.php +++ b/src/Content/ContentSubmitParams/Content/Video.php @@ -11,7 +11,7 @@ /** * Video. * - * @phpstan-type VideoShape = array{type?: 'video', url: string} + * @phpstan-type VideoShape = array{type: 'video', url: string} */ final class Video implements BaseModel { @@ -61,6 +61,17 @@ public static function with(string $url): self return $self; } + /** + * @param 'video' $type + */ + public function withType(string $type): self + { + $self = clone $this; + $self['type'] = $type; + + return $self; + } + /** * A public URL of the video content. */ diff --git a/src/Content/ContentSubmitParams/Policy.php b/src/Content/ContentSubmitParams/Policy.php index 0b0fb0e..41e3d2a 100644 --- a/src/Content/ContentSubmitParams/Policy.php +++ b/src/Content/ContentSubmitParams/Policy.php @@ -4,7 +4,10 @@ namespace ModerationAPI\Content\ContentSubmitParams; +use ModerationAPI\Content\ContentSubmitParams\Policy\Adult; +use ModerationAPI\Content\ContentSubmitParams\Policy\Cannabis; use ModerationAPI\Content\ContentSubmitParams\Policy\CodeAbuse; +use ModerationAPI\Content\ContentSubmitParams\Policy\Crypto; use ModerationAPI\Content\ContentSubmitParams\Policy\Flirtation; use ModerationAPI\Content\ContentSubmitParams\Policy\Guideline; use ModerationAPI\Content\ContentSubmitParams\Policy\Hate; @@ -31,6 +34,37 @@ use ModerationAPI\Core\Conversion\Contracts\Converter; use ModerationAPI\Core\Conversion\Contracts\ConverterSource; +/** + * @phpstan-import-type ToxicityShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Toxicity + * @phpstan-import-type PersonalInformationShape from \ModerationAPI\Content\ContentSubmitParams\Policy\PersonalInformation + * @phpstan-import-type ToxicitySevereShape from \ModerationAPI\Content\ContentSubmitParams\Policy\ToxicitySevere + * @phpstan-import-type HateShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Hate + * @phpstan-import-type IllicitShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Illicit + * @phpstan-import-type IllicitDrugsShape from \ModerationAPI\Content\ContentSubmitParams\Policy\IllicitDrugs + * @phpstan-import-type IllicitAlcoholShape from \ModerationAPI\Content\ContentSubmitParams\Policy\IllicitAlcohol + * @phpstan-import-type IllicitFirearmsShape from \ModerationAPI\Content\ContentSubmitParams\Policy\IllicitFirearms + * @phpstan-import-type IllicitTobaccoShape from \ModerationAPI\Content\ContentSubmitParams\Policy\IllicitTobacco + * @phpstan-import-type IllicitGamblingShape from \ModerationAPI\Content\ContentSubmitParams\Policy\IllicitGambling + * @phpstan-import-type CannabisShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Cannabis + * @phpstan-import-type AdultShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Adult + * @phpstan-import-type CryptoShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Crypto + * @phpstan-import-type SexualShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Sexual + * @phpstan-import-type FlirtationShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Flirtation + * @phpstan-import-type ProfanityShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Profanity + * @phpstan-import-type ViolenceShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Violence + * @phpstan-import-type SelfHarmShape from \ModerationAPI\Content\ContentSubmitParams\Policy\SelfHarm + * @phpstan-import-type SpamShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Spam + * @phpstan-import-type SelfPromotionShape from \ModerationAPI\Content\ContentSubmitParams\Policy\SelfPromotion + * @phpstan-import-type PoliticalShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Political + * @phpstan-import-type ReligionShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Religion + * @phpstan-import-type CodeAbuseShape from \ModerationAPI\Content\ContentSubmitParams\Policy\CodeAbuse + * @phpstan-import-type PiiMaskingShape from \ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking + * @phpstan-import-type URLMaskingShape from \ModerationAPI\Content\ContentSubmitParams\Policy\URLMasking + * @phpstan-import-type GuidelineShape from \ModerationAPI\Content\ContentSubmitParams\Policy\Guideline + * + * @phpstan-type PolicyVariants = Toxicity|PersonalInformation|ToxicitySevere|Hate|Illicit|IllicitDrugs|IllicitAlcohol|IllicitFirearms|IllicitTobacco|IllicitGambling|Cannabis|Adult|Crypto|Sexual|Flirtation|Profanity|Violence|SelfHarm|Spam|SelfPromotion|Political|Religion|CodeAbuse|PiiMasking|URLMasking|Guideline + * @phpstan-type PolicyShape = PolicyVariants|ToxicityShape|PersonalInformationShape|ToxicitySevereShape|HateShape|IllicitShape|IllicitDrugsShape|IllicitAlcoholShape|IllicitFirearmsShape|IllicitTobaccoShape|IllicitGamblingShape|CannabisShape|AdultShape|CryptoShape|SexualShape|FlirtationShape|ProfanityShape|ViolenceShape|SelfHarmShape|SpamShape|SelfPromotionShape|PoliticalShape|ReligionShape|CodeAbuseShape|PiiMaskingShape|URLMaskingShape|GuidelineShape + */ final class Policy implements ConverterSource { use SdkUnion; @@ -51,6 +85,9 @@ public static function variants(): array IllicitFirearms::class, IllicitTobacco::class, IllicitGambling::class, + Cannabis::class, + Adult::class, + Crypto::class, Sexual::class, Flirtation::class, Profanity::class, diff --git a/src/Content/ContentSubmitParams/Policy/Adult.php b/src/Content/ContentSubmitParams/Policy/Adult.php new file mode 100644 index 0000000..79a216f --- /dev/null +++ b/src/Content/ContentSubmitParams/Policy/Adult.php @@ -0,0 +1,93 @@ + */ + use SdkModel; + + /** @var 'adult' $id */ + #[Required] + public string $id = 'adult'; + + #[Required] + public bool $flag; + + #[Optional] + public ?float $threshold; + + /** + * `new Adult()` is missing required properties by the API. + * + * To enforce required parameters use + * ``` + * Adult::with(flag: ...) + * ``` + * + * Otherwise ensure the following setters are called + * + * ``` + * (new Adult)->withFlag(...) + * ``` + */ + public function __construct() + { + $this->initialize(); + } + + /** + * Construct an instance from the required parameters. + * + * You must use named parameters to construct any parameters with a default value. + */ + public static function with(bool $flag, ?float $threshold = null): self + { + $self = new self; + + $self['flag'] = $flag; + + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'adult' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + + return $self; + } + + public function withFlag(bool $flag): self + { + $self = clone $this; + $self['flag'] = $flag; + + return $self; + } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } +} diff --git a/src/Content/ContentSubmitParams/Policy/Cannabis.php b/src/Content/ContentSubmitParams/Policy/Cannabis.php new file mode 100644 index 0000000..417f2ef --- /dev/null +++ b/src/Content/ContentSubmitParams/Policy/Cannabis.php @@ -0,0 +1,93 @@ + */ + use SdkModel; + + /** @var 'cannabis' $id */ + #[Required] + public string $id = 'cannabis'; + + #[Required] + public bool $flag; + + #[Optional] + public ?float $threshold; + + /** + * `new Cannabis()` is missing required properties by the API. + * + * To enforce required parameters use + * ``` + * Cannabis::with(flag: ...) + * ``` + * + * Otherwise ensure the following setters are called + * + * ``` + * (new Cannabis)->withFlag(...) + * ``` + */ + public function __construct() + { + $this->initialize(); + } + + /** + * Construct an instance from the required parameters. + * + * You must use named parameters to construct any parameters with a default value. + */ + public static function with(bool $flag, ?float $threshold = null): self + { + $self = new self; + + $self['flag'] = $flag; + + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'cannabis' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + + return $self; + } + + public function withFlag(bool $flag): self + { + $self = clone $this; + $self['flag'] = $flag; + + return $self; + } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } +} diff --git a/src/Content/ContentSubmitParams/Policy/CodeAbuse.php b/src/Content/ContentSubmitParams/Policy/CodeAbuse.php index 1f00b84..3389bb4 100644 --- a/src/Content/ContentSubmitParams/Policy/CodeAbuse.php +++ b/src/Content/ContentSubmitParams/Policy/CodeAbuse.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type CodeAbuseShape = array{id?: 'code_abuse', flag: bool} + * @phpstan-type CodeAbuseShape = array{ + * id: 'code_abuse', flag: bool, threshold?: float|null + * } */ final class CodeAbuse implements BaseModel { @@ -23,6 +26,9 @@ final class CodeAbuse implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new CodeAbuse()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'code_abuse' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/Crypto.php b/src/Content/ContentSubmitParams/Policy/Crypto.php new file mode 100644 index 0000000..fafb05e --- /dev/null +++ b/src/Content/ContentSubmitParams/Policy/Crypto.php @@ -0,0 +1,93 @@ + */ + use SdkModel; + + /** @var 'crypto' $id */ + #[Required] + public string $id = 'crypto'; + + #[Required] + public bool $flag; + + #[Optional] + public ?float $threshold; + + /** + * `new Crypto()` is missing required properties by the API. + * + * To enforce required parameters use + * ``` + * Crypto::with(flag: ...) + * ``` + * + * Otherwise ensure the following setters are called + * + * ``` + * (new Crypto)->withFlag(...) + * ``` + */ + public function __construct() + { + $this->initialize(); + } + + /** + * Construct an instance from the required parameters. + * + * You must use named parameters to construct any parameters with a default value. + */ + public static function with(bool $flag, ?float $threshold = null): self + { + $self = new self; + + $self['flag'] = $flag; + + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'crypto' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + + return $self; + } + + public function withFlag(bool $flag): self + { + $self = clone $this; + $self['flag'] = $flag; + + return $self; + } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } +} diff --git a/src/Content/ContentSubmitParams/Policy/Flirtation.php b/src/Content/ContentSubmitParams/Policy/Flirtation.php index 9232ba7..8e5572f 100644 --- a/src/Content/ContentSubmitParams/Policy/Flirtation.php +++ b/src/Content/ContentSubmitParams/Policy/Flirtation.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type FlirtationShape = array{id?: 'flirtation', flag: bool} + * @phpstan-type FlirtationShape = array{ + * id: 'flirtation', flag: bool, threshold?: float|null + * } */ final class Flirtation implements BaseModel { @@ -23,6 +26,9 @@ final class Flirtation implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new Flirtation()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'flirtation' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/Guideline.php b/src/Content/ContentSubmitParams/Policy/Guideline.php index 2412b50..e93d3c1 100644 --- a/src/Content/ContentSubmitParams/Policy/Guideline.php +++ b/src/Content/ContentSubmitParams/Policy/Guideline.php @@ -4,13 +4,18 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** * @phpstan-type GuidelineShape = array{ - * id?: 'guideline', flag: bool, guidelineKey: string, instructions: string + * id: 'guideline', + * flag: bool, + * guidelineKey: string, + * instructions: string, + * threshold?: float|null, * } */ final class Guideline implements BaseModel @@ -31,6 +36,9 @@ final class Guideline implements BaseModel #[Required] public string $instructions; + #[Optional] + public ?float $threshold; + /** * `new Guideline()` is missing required properties by the API. * @@ -58,7 +66,8 @@ public function __construct() public static function with( bool $flag, string $guidelineKey, - string $instructions + string $instructions, + ?float $threshold = null, ): self { $self = new self; @@ -66,6 +75,19 @@ public static function with( $self['guidelineKey'] = $guidelineKey; $self['instructions'] = $instructions; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'guideline' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -92,4 +114,12 @@ public function withInstructions(string $instructions): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/Hate.php b/src/Content/ContentSubmitParams/Policy/Hate.php index 565421e..7f08e52 100644 --- a/src/Content/ContentSubmitParams/Policy/Hate.php +++ b/src/Content/ContentSubmitParams/Policy/Hate.php @@ -4,12 +4,13 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type HateShape = array{id?: 'hate', flag: bool} + * @phpstan-type HateShape = array{id: 'hate', flag: bool, threshold?: float|null} */ final class Hate implements BaseModel { @@ -23,6 +24,9 @@ final class Hate implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new Hate()` is missing required properties by the API. * @@ -47,12 +51,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'hate' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +80,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/Illicit.php b/src/Content/ContentSubmitParams/Policy/Illicit.php index 44ad94a..49aa2e5 100644 --- a/src/Content/ContentSubmitParams/Policy/Illicit.php +++ b/src/Content/ContentSubmitParams/Policy/Illicit.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitShape = array{id?: 'illicit', flag: bool} + * @phpstan-type IllicitShape = array{ + * id: 'illicit', flag: bool, threshold?: float|null + * } */ final class Illicit implements BaseModel { @@ -23,6 +26,9 @@ final class Illicit implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new Illicit()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/IllicitAlcohol.php b/src/Content/ContentSubmitParams/Policy/IllicitAlcohol.php index de716aa..1e7d56b 100644 --- a/src/Content/ContentSubmitParams/Policy/IllicitAlcohol.php +++ b/src/Content/ContentSubmitParams/Policy/IllicitAlcohol.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitAlcoholShape = array{id?: 'illicit_alcohol', flag: bool} + * @phpstan-type IllicitAlcoholShape = array{ + * id: 'illicit_alcohol', flag: bool, threshold?: float|null + * } */ final class IllicitAlcohol implements BaseModel { @@ -23,6 +26,9 @@ final class IllicitAlcohol implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new IllicitAlcohol()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit_alcohol' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/IllicitDrugs.php b/src/Content/ContentSubmitParams/Policy/IllicitDrugs.php index 9ac3cdd..716ebfe 100644 --- a/src/Content/ContentSubmitParams/Policy/IllicitDrugs.php +++ b/src/Content/ContentSubmitParams/Policy/IllicitDrugs.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitDrugsShape = array{id?: 'illicit_drugs', flag: bool} + * @phpstan-type IllicitDrugsShape = array{ + * id: 'illicit_drugs', flag: bool, threshold?: float|null + * } */ final class IllicitDrugs implements BaseModel { @@ -23,6 +26,9 @@ final class IllicitDrugs implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new IllicitDrugs()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit_drugs' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/IllicitFirearms.php b/src/Content/ContentSubmitParams/Policy/IllicitFirearms.php index 67a07d8..78ef79e 100644 --- a/src/Content/ContentSubmitParams/Policy/IllicitFirearms.php +++ b/src/Content/ContentSubmitParams/Policy/IllicitFirearms.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitFirearmsShape = array{id?: 'illicit_firearms', flag: bool} + * @phpstan-type IllicitFirearmsShape = array{ + * id: 'illicit_firearms', flag: bool, threshold?: float|null + * } */ final class IllicitFirearms implements BaseModel { @@ -23,6 +26,9 @@ final class IllicitFirearms implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new IllicitFirearms()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit_firearms' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/IllicitGambling.php b/src/Content/ContentSubmitParams/Policy/IllicitGambling.php index 5b962f3..b722ddb 100644 --- a/src/Content/ContentSubmitParams/Policy/IllicitGambling.php +++ b/src/Content/ContentSubmitParams/Policy/IllicitGambling.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitGamblingShape = array{id?: 'illicit_gambling', flag: bool} + * @phpstan-type IllicitGamblingShape = array{ + * id: 'illicit_gambling', flag: bool, threshold?: float|null + * } */ final class IllicitGambling implements BaseModel { @@ -23,6 +26,9 @@ final class IllicitGambling implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new IllicitGambling()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit_gambling' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/IllicitTobacco.php b/src/Content/ContentSubmitParams/Policy/IllicitTobacco.php index df3bd3c..737da92 100644 --- a/src/Content/ContentSubmitParams/Policy/IllicitTobacco.php +++ b/src/Content/ContentSubmitParams/Policy/IllicitTobacco.php @@ -4,12 +4,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** - * @phpstan-type IllicitTobaccoShape = array{id?: 'illicit_tobacco', flag: bool} + * @phpstan-type IllicitTobaccoShape = array{ + * id: 'illicit_tobacco', flag: bool, threshold?: float|null + * } */ final class IllicitTobacco implements BaseModel { @@ -23,6 +26,9 @@ final class IllicitTobacco implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new IllicitTobacco()` is missing required properties by the API. * @@ -47,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'illicit_tobacco' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -63,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/PersonalInformation.php b/src/Content/ContentSubmitParams/Policy/PersonalInformation.php index 3f8c6b3..2607528 100644 --- a/src/Content/ContentSubmitParams/Policy/PersonalInformation.php +++ b/src/Content/ContentSubmitParams/Policy/PersonalInformation.php @@ -4,13 +4,14 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; +use ModerationAPI\Core\Attributes\Optional; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** * @phpstan-type PersonalInformationShape = array{ - * id?: 'personal_information', flag: bool + * id: 'personal_information', flag: bool, threshold?: float|null * } */ final class PersonalInformation implements BaseModel @@ -25,6 +26,9 @@ final class PersonalInformation implements BaseModel #[Required] public bool $flag; + #[Optional] + public ?float $threshold; + /** * `new PersonalInformation()` is missing required properties by the API. * @@ -49,12 +53,25 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. */ - public static function with(bool $flag): self + public static function with(bool $flag, ?float $threshold = null): self { $self = new self; $self['flag'] = $flag; + null !== $threshold && $self['threshold'] = $threshold; + + return $self; + } + + /** + * @param 'personal_information' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + return $self; } @@ -65,4 +82,12 @@ public function withFlag(bool $flag): self return $self; } + + public function withThreshold(float $threshold): self + { + $self = clone $this; + $self['threshold'] = $threshold; + + return $self; + } } diff --git a/src/Content/ContentSubmitParams/Policy/PiiMasking.php b/src/Content/ContentSubmitParams/Policy/PiiMasking.php index b08c642..835db91 100644 --- a/src/Content/ContentSubmitParams/Policy/PiiMasking.php +++ b/src/Content/ContentSubmitParams/Policy/PiiMasking.php @@ -5,14 +5,15 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy; use ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking\Entity; -use ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking\Entity\ID; use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** + * @phpstan-import-type EntityShape from \ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking\Entity + * * @phpstan-type PiiMaskingShape = array{ - * id?: 'pii', entities: array + * id: 'pii', entities: array * } */ final class PiiMasking implements BaseModel @@ -52,13 +53,7 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param array, - * enable: bool, - * flag: bool, - * shouldMask: bool, - * mask?: string|null, - * }> $entities + * @param array $entities */ public static function with(array $entities): self { @@ -70,13 +65,18 @@ public static function with(array $entities): self } /** - * @param array, - * enable: bool, - * flag: bool, - * shouldMask: bool, - * mask?: string|null, - * }> $entities + * @param 'pii' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + + return $self; + } + + /** + * @param array $entities */ public function withEntities(array $entities): self { diff --git a/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity.php b/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity.php index 240c287..6a9d2de 100644 --- a/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity.php +++ b/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity.php @@ -4,19 +4,16 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking; -use ModerationAPI\Content\ContentSubmitParams\Policy\PiiMasking\Entity\ID; use ModerationAPI\Core\Attributes\Optional; -use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** * @phpstan-type EntityShape = array{ - * id: value-of, - * enable: bool, - * flag: bool, - * shouldMask: bool, + * enable?: bool|null, + * flag?: bool|null, * mask?: string|null, + * shouldMask?: bool|null, * } */ final class Entity implements BaseModel @@ -24,36 +21,18 @@ final class Entity implements BaseModel /** @use SdkModel */ use SdkModel; - /** @var value-of $id */ - #[Required(enum: ID::class)] - public string $id; - - #[Required] - public bool $enable; - - #[Required] - public bool $flag; + #[Optional] + public ?bool $enable; - #[Required] - public bool $shouldMask; + #[Optional] + public ?bool $flag; #[Optional] public ?string $mask; - /** - * `new Entity()` is missing required properties by the API. - * - * To enforce required parameters use - * ``` - * Entity::with(id: ..., enable: ..., flag: ..., shouldMask: ...) - * ``` - * - * Otherwise ensure the following setters are called - * - * ``` - * (new Entity)->withID(...)->withEnable(...)->withFlag(...)->withShouldMask(...) - * ``` - */ + #[Optional] + public ?bool $shouldMask; + public function __construct() { $this->initialize(); @@ -63,35 +42,19 @@ public function __construct() * Construct an instance from the required parameters. * * You must use named parameters to construct any parameters with a default value. - * - * @param ID|value-of $id */ public static function with( - ID|string $id, - bool $enable, - bool $flag, - bool $shouldMask, + ?bool $enable = null, + ?bool $flag = null, ?string $mask = null, + ?bool $shouldMask = null, ): self { $self = new self; - $self['id'] = $id; - $self['enable'] = $enable; - $self['flag'] = $flag; - $self['shouldMask'] = $shouldMask; - + null !== $enable && $self['enable'] = $enable; + null !== $flag && $self['flag'] = $flag; null !== $mask && $self['mask'] = $mask; - - return $self; - } - - /** - * @param ID|value-of $id - */ - public function withID(ID|string $id): self - { - $self = clone $this; - $self['id'] = $id; + null !== $shouldMask && $self['shouldMask'] = $shouldMask; return $self; } @@ -112,18 +75,18 @@ public function withFlag(bool $flag): self return $self; } - public function withShouldMask(bool $shouldMask): self + public function withMask(string $mask): self { $self = clone $this; - $self['shouldMask'] = $shouldMask; + $self['mask'] = $mask; return $self; } - public function withMask(string $mask): self + public function withShouldMask(bool $shouldMask): self { $self = clone $this; - $self['mask'] = $mask; + $self['shouldMask'] = $shouldMask; return $self; } diff --git a/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity/ID.php b/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity/ID.php deleted file mode 100644 index f771241..0000000 --- a/src/Content/ContentSubmitParams/Policy/PiiMasking/Entity/ID.php +++ /dev/null @@ -1,26 +0,0 @@ - + * id: 'url', entities: array * } */ final class URLMasking implements BaseModel @@ -52,13 +53,7 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param array, - * enable: bool, - * flag: bool, - * shouldMask: bool, - * mask?: string|null, - * }> $entities + * @param array $entities */ public static function with(array $entities): self { @@ -70,13 +65,18 @@ public static function with(array $entities): self } /** - * @param array, - * enable: bool, - * flag: bool, - * shouldMask: bool, - * mask?: string|null, - * }> $entities + * @param 'url' $id + */ + public function withID(string $id): self + { + $self = clone $this; + $self['id'] = $id; + + return $self; + } + + /** + * @param array $entities */ public function withEntities(array $entities): self { diff --git a/src/Content/ContentSubmitParams/Policy/URLMasking/Entity.php b/src/Content/ContentSubmitParams/Policy/URLMasking/Entity.php index cfe0c83..6680dee 100644 --- a/src/Content/ContentSubmitParams/Policy/URLMasking/Entity.php +++ b/src/Content/ContentSubmitParams/Policy/URLMasking/Entity.php @@ -4,19 +4,16 @@ namespace ModerationAPI\Content\ContentSubmitParams\Policy\URLMasking; -use ModerationAPI\Content\ContentSubmitParams\Policy\URLMasking\Entity\ID; use ModerationAPI\Core\Attributes\Optional; -use ModerationAPI\Core\Attributes\Required; use ModerationAPI\Core\Concerns\SdkModel; use ModerationAPI\Core\Contracts\BaseModel; /** * @phpstan-type EntityShape = array{ - * id: value-of, - * enable: bool, - * flag: bool, - * shouldMask: bool, + * enable?: bool|null, + * flag?: bool|null, * mask?: string|null, + * shouldMask?: bool|null, * } */ final class Entity implements BaseModel @@ -24,36 +21,18 @@ final class Entity implements BaseModel /** @use SdkModel */ use SdkModel; - /** @var value-of $id */ - #[Required(enum: ID::class)] - public string $id; - - #[Required] - public bool $enable; - - #[Required] - public bool $flag; + #[Optional] + public ?bool $enable; - #[Required] - public bool $shouldMask; + #[Optional] + public ?bool $flag; #[Optional] public ?string $mask; - /** - * `new Entity()` is missing required properties by the API. - * - * To enforce required parameters use - * ``` - * Entity::with(id: ..., enable: ..., flag: ..., shouldMask: ...) - * ``` - * - * Otherwise ensure the following setters are called - * - * ``` - * (new Entity)->withID(...)->withEnable(...)->withFlag(...)->withShouldMask(...) - * ``` - */ + #[Optional] + public ?bool $shouldMask; + public function __construct() { $this->initialize(); @@ -63,35 +42,19 @@ public function __construct() * Construct an instance from the required parameters. * * You must use named parameters to construct any parameters with a default value. - * - * @param ID|value-of $id */ public static function with( - ID|string $id, - bool $enable, - bool $flag, - bool $shouldMask, + ?bool $enable = null, + ?bool $flag = null, ?string $mask = null, + ?bool $shouldMask = null, ): self { $self = new self; - $self['id'] = $id; - $self['enable'] = $enable; - $self['flag'] = $flag; - $self['shouldMask'] = $shouldMask; - + null !== $enable && $self['enable'] = $enable; + null !== $flag && $self['flag'] = $flag; null !== $mask && $self['mask'] = $mask; - - return $self; - } - - /** - * @param ID|value-of $id - */ - public function withID(ID|string $id): self - { - $self = clone $this; - $self['id'] = $id; + null !== $shouldMask && $self['shouldMask'] = $shouldMask; return $self; } @@ -112,18 +75,18 @@ public function withFlag(bool $flag): self return $self; } - public function withShouldMask(bool $shouldMask): self + public function withMask(string $mask): self { $self = clone $this; - $self['shouldMask'] = $shouldMask; + $self['mask'] = $mask; return $self; } - public function withMask(string $mask): self + public function withShouldMask(bool $shouldMask): self { $self = clone $this; - $self['mask'] = $mask; + $self['shouldMask'] = $shouldMask; return $self; } diff --git a/src/Content/ContentSubmitParams/Policy/URLMasking/Entity/ID.php b/src/Content/ContentSubmitParams/Policy/URLMasking/Entity/ID.php deleted file mode 100644 index b2ec627..0000000 --- a/src/Content/ContentSubmitParams/Policy/URLMasking/Entity/ID.php +++ /dev/null @@ -1,26 +0,0 @@ -, - * meta: Meta, - * policies: list, - * recommendation: Recommendation, - * errors?: list|null, + * author: null|Author|AuthorShape, + * content: Content|ContentShape, + * evaluation: Evaluation|EvaluationShape, + * insights: list, + * meta: Meta|MetaShape, + * policies: list, + * recommendation: Recommendation|RecommendationShape, + * errors?: list|null, * } */ final class ContentSubmitResponse implements BaseModel @@ -71,7 +66,7 @@ final class ContentSubmitResponse implements BaseModel /** * Results of all insights enabled in the channel. * - * @var list $insights + * @var list $insights */ #[Required(list: Insight::class)] public array $insights; @@ -85,7 +80,7 @@ final class ContentSubmitResponse implements BaseModel /** * Results of all policies in the channel. Sorted by highest probability. * - * @var list $policies + * @var list $policies */ #[Required(list: Policy::class)] public array $policies; @@ -143,58 +138,14 @@ public function __construct() * * You must use named parameters to construct any parameters with a default value. * - * @param Author|array{ - * id: string, - * block: Block|null, - * status: value-of, - * trustLevel: TrustLevel, - * externalID?: string|null, - * }|null $author - * @param Content|array{ - * id: string, - * masked: bool, - * modified: string|array|array|null, - * } $content - * @param Evaluation|array{ - * flagProbability: float, - * flagged: bool, - * severityScore: float, - * unicodeSpoofed?: bool|null, - * } $evaluation - * @param list|null, - * }|LanguageInsight|array{ - * id?: 'language', probability: float, type?: 'insight', value: string|null - * }> $insights - * @param Meta|array{ - * channelKey: string, - * status: value-of, - * timestamp: float, - * usage: float, - * processingTime?: string|null, - * } $meta - * @param list|null, - * labels?: list