diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index a99fdc4..b682064 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,8 +1,15 @@
+---
version: 2
updates:
-- package-ecosystem: composer
- directory: "/"
- schedule:
- interval: weekly
- time: "04:00"
- open-pull-requests-limit: 10
+ - package-ecosystem: composer
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "04:00"
+ open-pull-requests-limit: 10
+ - package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "04:00"
+ open-pull-requests-limit: 5
diff --git a/.github/stale.yml b/.github/stale.yml
deleted file mode 100644
index 2e28b36..0000000
--- a/.github/stale.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-# https://github.com/marketplace/stale
-
-# Number of days of inactivity before an issue becomes stale
-daysUntilStale: 60
-# Number of days of inactivity before a stale issue is closed
-daysUntilClose: 7
-# Issues with these labels will never be considered stale
-exemptLabels:
- - pinned
- - security
-# Label to use when marking an issue as stale
-staleLabel: wontfix
-# Comment to post when marking an issue as stale. Set to `false` to disable
-markComment: >
- This issue has been automatically marked as stale because it has not had
- recent activity. It will be closed if no further activity occurs. Thank you
- for your contributions.
-# Comment to post when closing a stale issue. Set to `false` to disable
-closeComment: false
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index bc082b3..5365f28 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,61 +1,59 @@
+---
name: Run tests
-on: [push]
+on:
+ - push
jobs:
unit-tests:
strategy:
fail-fast: false
matrix:
- php: [7.2, 7.3, 7.4]
- dependency-version: [prefer-lowest, prefer-stable]
- os: [ubuntu-latest]
- test: [phpunit, phan, phpmd, phpcs, phpcbf, phpmnd, churn, phpstan, infection, psalm]
+ php:
+ - 8.3
+ - 8.4
+ - 8.5
+ dependency-version:
+ - prefer-lowest
+ - prefer-stable
+ os:
+ - ubuntu-latest
+ test:
+ - test-github
+
name: ${{ matrix.test }} on PHP${{ matrix.php }} with ${{ matrix.dependency-version }} on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
- uses: actions/checkout@v1
+ uses: actions/checkout@v7
- name: Setup PHP
- uses: shivammathur/setup-php@v1
+ uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
- extensions: dom, libxml, mbstring
- tools: prestissimo
- coverage: xdebug
- - name: Composer self-update
- run: |
- composer self-update
+ extensions: dom, libxml
+ coverage: pcov
- name: Composer update
run: |
- composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction --no-suggest
- - name: Composer test-${{ matrix.test }}-${{ matrix.os }}
+ composer update --${{ matrix.dependency-version }} --prefer-dist --no-interaction
+ - name: Composer ${{ matrix.test }}-${{ matrix.os }}
run: |
- composer test-${{ matrix.test }}-${{ matrix.os }}
+ composer ${{ matrix.test }}
- coverage:
- name: PHPUnit test coverage
+ security-audit:
+ # Audits the committed lock file, which is what Dependabot scans. Kept out of
+ # the matrix above because --prefer-lowest deliberately resolves to the oldest
+ # versions the constraints allow, which will always carry advisories.
+ name: Composer audit
runs-on: ubuntu-latest
steps:
- name: Checkout code
- uses: actions/checkout@v1
+ uses: actions/checkout@v7
- name: Setup PHP
- uses: shivammathur/setup-php@v1
+ uses: shivammathur/setup-php@v2
with:
- php-version: 7.4
+ php-version: 8.3
extensions: dom, libxml
- tools: prestissimo, phpunit
- coverage: xdebug
- - name: Composer self-update
- run: |
- composer self-update
- - name: Composer update
- run: |
- composer update --prefer-dist --no-interaction --no-suggest
- - name: Get coverage
- run: |
- phpunit --coverage-clover=coverage.xml
- - name: Send coverage report
+ coverage: none
+ - name: Audit composer.lock
run: |
- wget https://scrutinizer-ci.com/ocular.phar
- php ocular.phar code-coverage:upload --format=php-clover coverage.xml
+ composer audit --locked
diff --git a/.gitignore b/.gitignore
index d6d24cc..915e92c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,8 @@
/clover.xml
/vendor/
/.idea/
-/.php_cs.cache
-/infection.log
-/.phpunit.result.cache
\ No newline at end of file
+/.phpunit.result.cache
+/.phpunit.cache
+/.phpcs.cache
+.DS_Store
+CLAUDE.md
diff --git a/.mergify.yml b/.mergify.yml
index 4044a90..3b296f5 100644
--- a/.mergify.yml
+++ b/.mergify.yml
@@ -1,8 +1,17 @@
pull_request_rules:
- - name: automatic merge on new dependency
+ - name: automatic approval for Dependabot pull requests
conditions:
- author=dependabot[bot]
- - status-success=continuous-integration/travis-ci/pr
+ actions:
+ review:
+ type: APPROVE
+ message: Automatically approving dependabot
+
+ - name: automatic merge on dependabot pull requests
+ conditions:
+ - author=dependabot[bot]
+ - check-success~=^test*
+ - check-success=Composer audit
actions:
merge:
method: merge
diff --git a/.phan/config.php b/.phan/config.php
deleted file mode 100644
index ab3065a..0000000
--- a/.phan/config.php
+++ /dev/null
@@ -1,11 +0,0 @@
- null,
- 'directory_list' => [
- 'src',
- ],
- 'exclude_analysis_directory_list' => [
- 'vendor/'
- ],
-];
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..168abbd
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,55 @@
+COMPOSER ?= composer
+
+.DEFAULT_GOAL := all
+
+.PHONY: all
+all: install test ## Install dependencies and run the full suite
+
+.PHONY: install
+install: ## Install dependencies
+ $(COMPOSER) install --no-interaction
+
+.PHONY: update
+update: ## Update dependencies and refresh the lock file
+ $(COMPOSER) update --no-interaction
+
+.PHONY: test
+test: ## Run every quality gate
+ $(COMPOSER) test
+
+.PHONY: phpcs
+phpcs: ## Check coding standard
+ $(COMPOSER) phpcs
+
+.PHONY: phpcbf
+phpcbf: ## Fix what the coding standard can fix automatically
+ $(COMPOSER) phpcbf
+
+.PHONY: phpmd
+phpmd: ## Check cyclomatic complexity
+ $(COMPOSER) phpmd
+
+.PHONY: phpstan
+phpstan: ## Run static analysis
+ $(COMPOSER) phpstan
+
+.PHONY: phpunit
+phpunit: ## Run the tests with coverage
+ $(COMPOSER) phpunit
+
+.PHONY: audit
+audit: ## Check the lock file for known advisories
+ $(COMPOSER) audit --locked
+
+.PHONY: example
+example: install ## Run the usage example
+ php example.php
+
+.PHONY: clean
+clean: ## Remove installed dependencies and build artifacts
+ rm -rf vendor .phpunit.cache .phpunit.result.cache .phpcs.cache clover.xml
+
+.PHONY: help
+help: ## List the available targets
+ @grep -hE '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) \
+ | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-10s\033[0m %s\n", $$1, $$2}'
diff --git a/README.md b/README.md
index 33387e0..d1a648c 100644
--- a/README.md
+++ b/README.md
@@ -1,53 +1,165 @@
# [hyperized/xml-validator](https://packagist.org/packages/hyperized/xml-validator)
-[](https://plant.treeware.earth/hyperized/xml-validator)  [](https://scrutinizer-ci.com/g/hyperized/xml-validator/?branch=master) [](https://scrutinizer-ci.com/g/hyperized/xml-validator/?branch=master) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fhyperized%2Fxml-validator?ref=badge_shield) [](https://packagist.org/packages/hyperized/xml-validator)
+[](https://plant.treeware.earth/hyperized/xml-validator)  [](https://scrutinizer-ci.com/g/hyperized/xml-validator/?branch=master) [](https://app.fossa.io/projects/git%2Bgithub.com%2Fhyperized%2Fxml-validator?ref=badge_shield) [](https://packagist.org/packages/hyperized/xml-validator)
A simple PHP XML validator.
## Installation
-```shell script
+```shell
composer require hyperized/xml-validator
```
+| Package | PHP | Notes |
+| --- | --- | --- |
+| 2.x | ^8.3 | Current. Requires `ext-dom` and `ext-libxml` |
+| 1.x | >=7.2 | Unmaintained. See [Migrating from 1.x](#migrating-from-1x) |
+
## Usage
+Validate a document and report why it failed:
+
```php
-validateXMLFile('/path/to/document.xml', '/path/to/schema.xsd');
+} catch (InvalidXml $exception) {
+ // Malformed, or rejected by the schema. Line and column survive.
+ foreach ($exception->getErrors() as $error) {
+ printf("line %d column %d: %s\n", $error->line, $error->column, trim($error->message));
+ }
+} catch (XmlValidatorException $exception) {
+ // Missing, unreadable or empty file.
+ printf("%s: %s\n", $exception::class, $exception->getMessage());
+}
+```
-$xmlString = file_get_contents(__DIR__ . '/tests/files/correct.xml');
-$dirtyXMLString = file_get_contents(__DIR__ . '/tests/files/incorrect.xml');
-$xmlFile = __DIR__ . '/tests/files/correct.xml';
-$xsdFile = __DIR__ . '/tests/files/simple.xsd';
+The schema is optional, and a document you already hold in memory goes through
+`validateXMLString()` instead. Both return `void` and throw on failure:
-$validator = new Validator();
+```php
+$validator->validateXMLFile('/path/to/document.xml');
+$validator->validateXMLString($xml);
+$validator->validateXMLString($xml, '/path/to/schema.xsd');
+```
-// String validation
-print_r($validator->isXMLStringValid($xmlString)); // 1
-print_r($validator->isXMLStringValid($xmlString, $xsdFile)); // 1
+### Exceptions
-// File validation
-print_r($validator->isXMLFileValid($xmlFile)); // 1
-print_r($validator->isXMLFileValid($xmlFile, $xsdFile)); // 1
+Every exception this package throws implements `XmlValidatorException`, so one
+catch block covers all of them and keeps working when a new one is added.
-// Error handling
-try {
- $validator->isXMLStringValid($dirtyXMLString, $xsdFile);
-} catch (Exceptions\InvalidXmlException $exception)
-{
- print_r($exception->getMessage()); // xmlParseEntityRef: no name\n The document has no document element.
-}
+| Exception | Thrown when |
+| --- | --- |
+| `FileDoesNotExist` | No file at the given XML or XSD path |
+| `FileCouldNotBeOpenedException` | The path exists but reading it failed |
+| `EmptyFile` | The XML file holds nothing |
+| `InvalidXml` | Malformed, empty once trimmed, or rejected by the schema |
+
+All four extend `RuntimeException`.
+
+`InvalidXml::getErrors()` returns libxml's own `LibXMLError` objects, so line,
+column and level survive. `getMessage()` is a newline-joined summary of the same
+errors, which is usually what you want in a log line.
+
+### When you only need yes or no
+
+The `is*Valid()` predicates run the same check, catch the exceptions above and
+return `false` instead. They never throw:
+
+```php
+$validator->isXMLFileValid('/path/to/document.xml');
+$validator->isXMLFileValid('/path/to/document.xml', '/path/to/schema.xsd');
+
+$validator->isXMLStringValid($xml);
+$validator->isXMLStringValid($xml, '/path/to/schema.xsd');
+```
+
+Because they are implemented on top of the throwing methods, the two forms can
+never disagree. Reach for these when a failure needs no explanation; reach for
+`validate*()` when it does.
+
+### Dependency injection
+
+`Validator` implements `ValidatorInterface`, which declares all eight public
+methods. Type-hint against the interface where you inject or mock it:
+
+```php
+use Hyperized\Xml\ValidatorInterface;
+
+public function __construct(private readonly ValidatorInterface $validator) {}
+```
+
+No error state is kept between calls, so an instance is safe to reuse and to
+share, including as a container singleton. The only mutable state is the
+document version and encoding covered below.
+
+### Document version and encoding
+
+`DOMDocument` is constructed with an XML version of `1.0` and an encoding of
+`utf-8`. Prefer setting them once, at construction:
+
+```php
+$validator = new Validator(version: '1.1', encoding: 'iso-8859-1');
+
+$validator->getVersion(); // '1.1'
+$validator->getEncoding(); // 'iso-8859-1'
+```
+
+`setVersion()` and `setEncoding()` exist too, but they mutate the instance. On a
+validator you have shared, that change is visible to every other caller, so
+reach for the constructor instead.
+
+### Untrusted input
+
+libxml does not resolve external entities and caps internal entity expansion, so
+`SYSTEM` references are not fetched and expansion bombs are rejected rather than
+exhausting memory. That protection comes from libxml's defaults rather than from
+this package, and this package does not weaken them: `LIBXML_NOENT` is never
+passed.
+
+Schema paths are a different matter. `validateXMLFile()` and
+`validateXMLString()` both read the XSD from the path you give them, so that
+path should come from your own configuration and never from a request.
+
+## Migrating from 1.x
+
+2.0 replaces the error-reporting API. The old `throwError()` could not report
+failures from `isXMLStringValid()` at all, and raised a fatal
+`Error: Typed property ... must not be accessed before initialization` when
+nothing had failed yet.
+
+| 1.x | 2.0 |
+| --- | --- |
+| `$validator->throwError()` | Catch from `validateXMLFile()` / `validateXMLString()` |
+| `catch (EmptyFile \| FileDoesNotExist \| ...)` | `catch (XmlValidatorException)` |
+| Exceptions extend `Exception` | Exceptions extend `RuntimeException` |
+| Error message string only | `InvalidXml::getErrors()` with line and column |
+
+Also in 2.0:
+
+- PHP 8.3 is the minimum, replacing `^8.1|^8.2|^8.3`.
+- Nullable parameters are declared `?string`, so PHP 8.4 and newer no longer
+ emit implicit-nullable deprecations.
+- `libxml_use_internal_errors()` is restored to its previous value instead of
+ being left switched on for the rest of the process.
+
+## Development
+
+```shell
+make # install dependencies and run every quality gate
+make help # list the available targets
```
## Treeware
You're free to use this package, but if it makes it to your production environment you are required to buy the world a tree.
-It’s now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you support this package and contribute to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
+It's now common knowledge that one of the best tools to tackle the climate crisis and keep our temperatures from rising above 1.5C is to plant trees. If you support this package and contribute to the Treeware forest you'll be creating employment for local families and restoring wildlife habitats.
You can buy trees here [offset.earth/treeware](https://plant.treeware.earth/hyperized/xml-validator)
diff --git a/composer.json b/composer.json
index e3edffd..06a5673 100644
--- a/composer.json
+++ b/composer.json
@@ -1,12 +1,12 @@
{
"name": "hyperized/xml-validator",
- "type": "library",
"description": "A simple PHP XML validator",
+ "license": "MIT",
+ "type": "library",
"keywords": [
"xml",
"validator"
],
- "license": "MIT",
"authors": [
{
"name": "Gerben Geijteman",
@@ -14,23 +14,18 @@
}
],
"require": {
- "php": ">=7.2",
- "ext-dom": "20031129",
- "ext-libxml": "^7.2 || ^8.0"
+ "php": "^8.3",
+ "ext-dom": "*",
+ "ext-libxml": "*"
},
"require-dev": {
- "ext-mbstring": "^7.2",
- "bmitch/churn-php": "^1.0.3",
- "ergebnis/composer-normalize": "^2.3",
- "infection/infection": "^0.15.0",
- "phan/phan": "^2.4",
- "phpmd/phpmd": "@stable",
- "phpstan/phpstan": "^0.12.0",
- "phpunit/phpunit": "^7 || ^8 || ^9",
- "povils/phpmnd": "^2.0",
- "squizlabs/php_codesniffer": "^3.5",
- "vimeo/psalm": "^3.8"
+ "ergebnis/composer-normalize": "^2.52",
+ "phpmd/phpmd": "^2.15",
+ "phpstan/phpstan": "^2.2",
+ "phpunit/phpunit": "^12.5",
+ "squizlabs/php_codesniffer": "^4.0.2"
},
+ "minimum-stability": "stable",
"autoload": {
"psr-4": {
"Hyperized\\Xml\\": "src/"
@@ -41,86 +36,26 @@
"Hyperized\\Xml\\Tests\\": "tests/"
}
},
- "minimum-stability": "stable",
+ "config": {
+ "allow-plugins": {
+ "ergebnis/composer-normalize": true
+ }
+ },
"scripts": {
- "churn": "vendor/bin/churn run src",
- "churn.bat": "vendor\\bin\\churn.bat run src",
- "infection": "vendor/bin/infection",
- "infection.bat": "vendor\\bin\\infection.bat",
- "phan": "vendor/bin/phan --allow-polyfill-parser",
- "phan.bat": "vendor\\bin\\phan.bat --allow-polyfill-parser",
- "phpcbf": "vendor/bin/phpcbf src",
- "phpcbf.bat": "vendor\\bin\\phpcbf.bat src",
- "phpcs": "vendor/bin/phpcs src --standard=PSR2",
- "phpcs.bat": "vendor\\bin\\phpcs.bat src --standard=PSR2",
+ "audit-lock": "composer audit --locked",
+ "phpcbf": "vendor/bin/phpcbf",
+ "phpcs": "vendor/bin/phpcs",
"phpmd": "vendor/bin/phpmd --strict src text cyclomatic.xml",
- "phpmd.bat": "vendor\\bin\\phpmd.bat --strict src text cyclomatic.xml",
- "phpmnd": "vendor/bin/phpmnd src",
- "phpmnd.bat": "vendor\\bin\\phpmnd.bat src",
- "phpstan": "vendor/bin/phpstan --level=max analyse src tests",
- "phpstan.bat": "vendor\\bin\\phpstan.bat --level=max analyse src tests",
- "phpunit": "vendor/phpunit/phpunit/phpunit --configuration phpunit.xml.dist",
- "psalm": "vendor/bin/psalm",
- "psalm.bat": "vendor\\bin\\psalm.bat",
- "test-churn-macos-latest": [
- "@churn"
- ],
- "test-churn-ubuntu-latest": [
- "@churn"
- ],
- "test-infection-macos-latest": [
- "@infection"
- ],
- "test-infection-ubuntu-latest": [
- "@infection"
- ],
- "test-phan-macos-latest": [
- "@phan"
- ],
- "test-phan-ubuntu-latest": [
- "@phan"
- ],
- "test-phpcbf-macos-latest": [
- "@phpcbf"
- ],
- "test-phpcbf-ubuntu-latest": [
- "@phpcbf"
- ],
- "test-phpcs-macos-latest": [
- "@phpcs"
- ],
- "test-phpcs-ubuntu-latest": [
- "@phpcs"
- ],
- "test-phpmd-macos-latest": [
- "@phpmd"
- ],
- "test-phpmd-ubuntu-latest": [
- "@phpmd"
- ],
- "test-phpmnd-macos-latest": [
- "@phpmnd"
- ],
- "test-phpmnd-ubuntu-latest": [
- "@phpmnd"
- ],
- "test-phpstan-macos-latest": [
- "@phpstan"
- ],
- "test-phpstan-ubuntu-latest": [
- "@phpstan"
- ],
- "test-phpunit-macos-latest": [
+ "phpstan": "vendor/bin/phpstan analyse",
+ "phpunit": "XDEBUG_MODE=coverage vendor/bin/phpunit --configuration phpunit.xml.dist",
+ "test": [
+ "@phpcs",
+ "@phpmd",
+ "@phpstan",
"@phpunit"
],
- "test-phpunit-ubuntu-latest": [
- "@phpunit"
- ],
- "test-psalm-macos-latest": [
- "@psalm"
- ],
- "test-psalm-ubuntu-latest": [
- "@psalm"
+ "test-github": [
+ "@test"
]
}
}
diff --git a/composer.lock b/composer.lock
index 88a04c0..0b39962 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,49 +4,50 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b6a9f24880e8098dde98fea71437de39",
+ "content-hash": "74e151248ce697ed8091827225b69b28",
"packages": [],
"packages-dev": [
{
- "name": "amphp/amp",
- "version": "v2.4.3",
+ "name": "composer/pcre",
+ "version": "3.4.0",
"source": {
"type": "git",
- "url": "https://github.com/amphp/amp.git",
- "reference": "23ac95fc6d6973231763f5ed7d1309b39429b974"
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/23ac95fc6d6973231763f5ed7d1309b39429b974",
- "reference": "23ac95fc6d6973231763f5ed7d1309b39429b974",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
"shasum": ""
},
"require": {
- "php": ">=7"
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<2.2.2"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6.0.9 | ^7",
- "react/promise": "^2",
- "vimeo/psalm": "^3.11@dev"
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^9"
},
"type": "library",
"extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
- "Amp\\": "lib"
- },
- "files": [
- "lib/functions.php",
- "lib/Internal/functions.php"
- ]
+ "Composer\\Pcre\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -54,75 +55,63 @@
],
"authors": [
{
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
+ "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.4.0"
+ },
+ "funding": [
{
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "url": "https://github.com/composer",
+ "type": "github"
}
],
- "description": "A non-blocking concurrency framework for PHP applications.",
- "homepage": "http://amphp.org/amp",
- "keywords": [
- "async",
- "asynchronous",
- "awaitable",
- "concurrency",
- "event",
- "event-loop",
- "future",
- "non-blocking",
- "promise"
- ],
- "time": "2020-04-19T15:54:21+00:00"
+ "time": "2026-06-07T11:47:49+00:00"
},
{
- "name": "amphp/byte-stream",
- "version": "v1.7.3",
+ "name": "composer/xdebug-handler",
+ "version": "3.0.5",
"source": {
"type": "git",
- "url": "https://github.com/amphp/byte-stream.git",
- "reference": "b867505edb79dda8f253ca3c3a2bbadae4b16592"
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/b867505edb79dda8f253ca3c3a2bbadae4b16592",
- "reference": "b867505edb79dda8f253ca3c3a2bbadae4b16592",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
"shasum": ""
},
"require": {
- "amphp/amp": "^2"
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "friendsofphp/php-cs-fixer": "^2.3",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6 || ^7 || ^8",
- "vimeo/psalm": "^3.9@dev"
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "Amp\\ByteStream\\": "lib"
- },
- "files": [
- "lib/functions.php"
- ]
+ "Composer\\XdebugHandler\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -130,69 +119,92 @@
],
"authors": [
{
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
+ "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"
},
{
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "http://amphp.org/byte-stream",
- "keywords": [
- "amp",
- "amphp",
- "async",
- "io",
- "non-blocking",
- "stream"
- ],
- "time": "2020-04-04T16:56:54+00:00"
+ "time": "2024-05-06T16:37:16+00:00"
},
{
- "name": "bmitch/churn-php",
- "version": "1.0.3",
+ "name": "ergebnis/composer-normalize",
+ "version": "2.52.0",
"source": {
"type": "git",
- "url": "https://github.com/bmitch/churn-php.git",
- "reference": "7c416d7342e211588036773e0e504ff211aa6a59"
+ "url": "https://github.com/ergebnis/composer-normalize.git",
+ "reference": "988f83f5e51a42cdd2337e5fcd935432f8dfa33c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bmitch/churn-php/zipball/7c416d7342e211588036773e0e504ff211aa6a59",
- "reference": "7c416d7342e211588036773e0e504ff211aa6a59",
+ "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/988f83f5e51a42cdd2337e5fcd935432f8dfa33c",
+ "reference": "988f83f5e51a42cdd2337e5fcd935432f8dfa33c",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "php-di/php-di": "^5.4",
- "symfony/console": "^3.4 || ^4.0",
- "symfony/process": "^3.4 || ^4.0",
- "symfony/yaml": "^3.4 || ^4.0",
- "tightenco/collect": "^5.4",
- "webmozart/assert": "^1.2"
+ "composer-plugin-api": "^2.0.0",
+ "ergebnis/json": "^1.4.0",
+ "ergebnis/json-normalizer": "^4.9.0",
+ "ergebnis/json-printer": "^3.7.0",
+ "ext-json": "*",
+ "justinrainbow/json-schema": "^5.2.12 || ^6.0.0",
+ "localheinz/diff": "^1.3.0",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "bmitch/codor": "^1.0",
- "jakub-onderka/php-console-highlighter": "^0.3.2",
- "jakub-onderka/php-parallel-lint": "^0.9.2",
- "larapack/dd": "^1.1",
- "mockery/mockery": "dev-master",
- "phploc/phploc": "^4.0",
- "phpmd/phpmd": "^2.5",
- "phpunit/phpunit": "^5.7",
- "sebastian/phpcpd": "^2.0",
- "sensiolabs/security-checker": "^4.0",
- "slevomat/coding-standard": "^2.0"
+ "composer/composer": "^2.9.8",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.62.1",
+ "ergebnis/phpstan-rules": "^2.13.1",
+ "ergebnis/phpunit-slow-test-detector": "^2.24.0",
+ "ergebnis/rector-rules": "^1.18.1",
+ "fakerphp/faker": "^1.24.1",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.54",
+ "phpstan/phpstan-deprecation-rules": "^2.0.4",
+ "phpstan/phpstan-phpunit": "^2.0.16",
+ "phpstan/phpstan-strict-rules": "^2.0.11",
+ "phpunit/phpunit": "^9.6.33",
+ "rector/rector": "^2.4.3",
+ "symfony/filesystem": "^5.4.41"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin",
+ "branch-alias": {
+ "dev-main": "2.52-dev"
+ },
+ "plugin-optional": true,
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
},
- "bin": [
- "bin/churn"
- ],
- "type": "library",
"autoload": {
"psr-4": {
- "Churn\\": "src"
+ "Ergebnis\\Composer\\Normalize\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -201,47 +213,74 @@
],
"authors": [
{
- "name": "Bill Mitchell",
- "email": "wkmitch@gmail.com"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Discover files in need of refactoring.",
- "homepage": "https://github.com/bmitch/churn-php",
+ "description": "Provides a composer plugin for normalizing composer.json.",
+ "homepage": "https://github.com/ergebnis/composer-normalize",
"keywords": [
- "bmitch",
- "churn-php"
+ "composer",
+ "normalize",
+ "normalizer",
+ "plugin"
],
- "time": "2019-01-26T15:08:51+00:00"
+ "support": {
+ "issues": "https://github.com/ergebnis/composer-normalize/issues",
+ "security": "https://github.com/ergebnis/composer-normalize/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/composer-normalize"
+ },
+ "time": "2026-05-15T15:39:24+00:00"
},
{
- "name": "composer/semver",
- "version": "1.5.1",
+ "name": "ergebnis/json",
+ "version": "1.6.0",
"source": {
"type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de"
+ "url": "https://github.com/ergebnis/json.git",
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
- "reference": "c6bea70230ef4dd483e6bbcab6005f682ed3a8de",
+ "url": "https://api.github.com/repos/ergebnis/json/zipball/7b56d2b5d9e897e75b43e2e753075a0904c921b1",
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0"
+ "ext-json": "*",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5"
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpstan-rules": "^2.11.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
+ "infection/infection": "~0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.22",
+ "phpstan/phpstan-deprecation-rules": "^2.0.3",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpunit/phpunit": "^9.6.24",
+ "rector/rector": "^2.1.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "1.7-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
}
},
"autoload": {
"psr-4": {
- "Composer\\Semver\\": "src"
+ "Ergebnis\\Json\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -250,55 +289,79 @@
],
"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"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "description": "Provides a Json value object for representing a valid JSON string.",
+ "homepage": "https://github.com/ergebnis/json",
"keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
+ "json"
],
- "time": "2020-01-13T12:06:48+00:00"
+ "support": {
+ "issues": "https://github.com/ergebnis/json/issues",
+ "security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json"
+ },
+ "time": "2025-09-06T09:08:45+00:00"
},
{
- "name": "composer/xdebug-handler",
- "version": "1.4.1",
+ "name": "ergebnis/json-normalizer",
+ "version": "4.10.1",
"source": {
"type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7"
+ "url": "https://github.com/ergebnis/json-normalizer.git",
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/1ab9842d69e64fb3a01be6b656501032d1b78cb7",
- "reference": "1ab9842d69e64fb3a01be6b656501032d1b78cb7",
+ "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/77961faf2c651c3f05977b53c6c68e8434febf62",
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
+ "ergebnis/json": "^1.2.0",
+ "ergebnis/json-pointer": "^3.4.0",
+ "ergebnis/json-printer": "^3.5.0",
+ "ergebnis/json-schema-validator": "^4.2.0",
+ "ext-json": "*",
+ "justinrainbow/json-schema": "^5.2.12 || ^6.0.0",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
+ "composer/semver": "^3.4.3",
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
+ "infection/infection": "~0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.19",
+ "rector/rector": "^1.2.10"
+ },
+ "suggest": {
+ "composer/semver": "If you want to use ComposerJsonNormalizer or VersionConstraintNormalizer"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.11-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
- "Composer\\XdebugHandler\\": "src"
+ "Ergebnis\\Json\\Normalizer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -307,84 +370,72 @@
],
"authors": [
{
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Restarts a process without Xdebug.",
+ "description": "Provides generic and vendor-specific normalizers for normalizing JSON documents.",
+ "homepage": "https://github.com/ergebnis/json-normalizer",
"keywords": [
- "Xdebug",
- "performance"
+ "json",
+ "normalizer"
],
- "time": "2020-03-01T12:26:26+00:00"
- },
- {
- "name": "container-interop/container-interop",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/container-interop/container-interop.git",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
- "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
- "shasum": ""
- },
- "require": {
- "psr/container": "^1.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Interop\\Container\\": "src/Interop/Container/"
- }
+ "support": {
+ "issues": "https://github.com/ergebnis/json-normalizer/issues",
+ "security": "https://github.com/ergebnis/json-normalizer/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json-normalizer"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
- "homepage": "https://github.com/container-interop/container-interop",
- "abandoned": "psr/container",
- "time": "2017-02-14T19:40:03+00:00"
+ "time": "2025-09-06T09:18:13+00:00"
},
{
- "name": "doctrine/instantiator",
- "version": "1.3.0",
+ "name": "ergebnis/json-pointer",
+ "version": "3.8.0",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
+ "url": "https://github.com/ergebnis/json-pointer.git",
+ "reference": "b58c3c468a7ff109fdf9a255f17de29ecbe5276c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
- "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
+ "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/b58c3c468a7ff109fdf9a255f17de29ecbe5276c",
+ "reference": "b58c3c468a7ff109fdf9a255f17de29ecbe5276c",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "doctrine/coding-standard": "^6.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13",
- "phpstan/phpstan-phpunit": "^0.11",
- "phpstan/phpstan-shim": "^0.11",
- "phpunit/phpunit": "^7.0"
+ "ergebnis/composer-normalize": "^2.50.0",
+ "ergebnis/data-provider": "^3.6.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.60.2",
+ "ergebnis/phpstan-rules": "^2.13.1",
+ "ergebnis/phpunit-slow-test-detector": "^2.24.0",
+ "ergebnis/rector-rules": "^1.16.0",
+ "fakerphp/faker": "^1.24.1",
+ "infection/infection": "~0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.1.46",
+ "phpstan/phpstan-deprecation-rules": "^2.0.4",
+ "phpstan/phpstan-phpunit": "^2.0.16",
+ "phpstan/phpstan-strict-rules": "^2.0.10",
+ "phpunit/phpunit": "^9.6.34",
+ "rector/rector": "^2.4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.2.x-dev"
+ "dev-main": "3.8-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
}
},
"autoload": {
"psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ "Ergebnis\\Json\\Pointer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -393,64 +444,73 @@
],
"authors": [
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "http://ocramius.github.com/"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+ "description": "Provides an abstraction of a JSON pointer.",
+ "homepage": "https://github.com/ergebnis/json-pointer",
"keywords": [
- "constructor",
- "instantiate"
+ "RFC6901",
+ "json",
+ "pointer"
],
- "time": "2019-10-21T16:45:58+00:00"
+ "support": {
+ "issues": "https://github.com/ergebnis/json-pointer/issues",
+ "security": "https://github.com/ergebnis/json-pointer/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json-pointer"
+ },
+ "time": "2026-04-07T14:52:13+00:00"
},
{
- "name": "ergebnis/composer-normalize",
- "version": "2.3.2",
+ "name": "ergebnis/json-printer",
+ "version": "3.8.1",
"source": {
"type": "git",
- "url": "https://github.com/ergebnis/composer-normalize.git",
- "reference": "d171b088ff9dcfda53277200a9ecc9a1d0deaef5"
+ "url": "https://github.com/ergebnis/json-printer.git",
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/d171b088ff9dcfda53277200a9ecc9a1d0deaef5",
- "reference": "d171b088ff9dcfda53277200a9ecc9a1d0deaef5",
+ "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^1.1.0",
- "ergebnis/json-normalizer": "~0.11.0",
- "ergebnis/json-printer": "^3.0.2",
- "localheinz/diff": "^1.0.1",
- "php": "^7.1"
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "composer/composer": "^1.10.1",
- "ergebnis/license": "~0.1.0",
- "ergebnis/php-cs-fixer-config": "^2.1.0",
- "ergebnis/phpstan-rules": "~0.14.3",
- "ergebnis/test-util": "~1.0.0",
- "jangregor/phpstan-prophecy": "~0.6.2",
- "phpstan/extension-installer": "^1.0.3",
- "phpstan/phpstan": "~0.12.14",
- "phpstan/phpstan-deprecation-rules": "~0.12.2",
- "phpstan/phpstan-phpunit": "~0.12.6",
- "phpstan/phpstan-strict-rules": "~0.12.2",
- "phpunit/phpunit": "^7.5.20",
- "psalm/plugin-phpunit": "~0.9.0",
- "symfony/filesystem": "^4.4.5",
- "vimeo/psalm": "^3.9.5"
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
+ "infection/infection": "~0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.1",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.21",
+ "rector/rector": "^1.2.10"
},
- "type": "composer-plugin",
+ "type": "library",
"extra": {
- "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin"
+ "branch-alias": {
+ "dev-main": "3.9-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
},
"autoload": {
"psr-4": {
- "Ergebnis\\Composer\\Normalize\\": "src/"
+ "Ergebnis\\Json\\Printer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -460,59 +520,74 @@
"authors": [
{
"name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Provides a composer plugin for normalizing composer.json.",
- "homepage": "https://github.com/ergebnis/composer-normalize",
+ "description": "Provides a JSON printer, allowing for flexible indentation.",
+ "homepage": "https://github.com/ergebnis/json-printer",
"keywords": [
- "composer",
- "normalize",
- "normalizer",
- "plugin"
+ "formatter",
+ "json",
+ "printer"
],
- "time": "2020-03-13T20:09:01+00:00"
+ "support": {
+ "issues": "https://github.com/ergebnis/json-printer/issues",
+ "security": "https://github.com/ergebnis/json-printer/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json-printer"
+ },
+ "time": "2025-09-06T09:59:26+00:00"
},
{
- "name": "ergebnis/json-normalizer",
- "version": "0.11.0",
+ "name": "ergebnis/json-schema-validator",
+ "version": "4.5.1",
"source": {
"type": "git",
- "url": "https://github.com/ergebnis/json-normalizer.git",
- "reference": "6a41d9a53f640bff8ef5516efd3aadc6f1ad1f37"
+ "url": "https://github.com/ergebnis/json-schema-validator.git",
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/6a41d9a53f640bff8ef5516efd3aadc6f1ad1f37",
- "reference": "6a41d9a53f640bff8ef5516efd3aadc6f1ad1f37",
+ "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/b739527a480a9e3651360ad351ea77e7e9019df2",
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2",
"shasum": ""
},
"require": {
- "ergebnis/json-printer": "^3.0.2",
+ "ergebnis/json": "^1.2.0",
+ "ergebnis/json-pointer": "^3.4.0",
"ext-json": "*",
- "justinrainbow/json-schema": "^4.0.0 || ^5.0.0",
- "php": "^7.1"
+ "justinrainbow/json-schema": "^5.2.12 || ^6.0.0",
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "ergebnis/php-cs-fixer-config": "^1.1.3",
- "ergebnis/phpstan-rules": "~0.14.2",
- "ergebnis/test-util": "~0.9.1",
- "infection/infection": "~0.13.6",
- "jangregor/phpstan-prophecy": "~0.6.0",
- "phpbench/phpbench": "~0.16.10",
- "phpstan/extension-installer": "^1.0.3",
- "phpstan/phpstan": "~0.12.4",
- "phpstan/phpstan-deprecation-rules": "~0.12.1",
- "phpstan/phpstan-phpunit": "~0.12.5",
- "phpstan/phpstan-strict-rules": "~0.12.1",
- "phpunit/phpunit": "^7.5.20",
- "psalm/plugin-phpunit": "~0.8.0",
- "vimeo/psalm": "^3.8.2"
+ "ergebnis/composer-normalize": "^2.44.0",
+ "ergebnis/data-provider": "^3.3.0",
+ "ergebnis/license": "^2.5.0",
+ "ergebnis/php-cs-fixer-config": "^6.37.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.16.1",
+ "fakerphp/faker": "^1.24.0",
+ "infection/infection": "~0.26.6",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.10",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "phpunit/phpunit": "^9.6.20",
+ "rector/rector": "^1.2.10"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.6-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
- "Ergebnis\\Json\\Normalizer\\": "src/"
+ "Ergebnis\\Json\\SchemaValidator\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -522,52 +597,63 @@
"authors": [
{
"name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Provides generic and vendor-specific normalizers for normalizing JSON documents.",
- "homepage": "https://github.com/ergebnis/json-normalizer",
+ "description": "Provides a JSON schema validator, building on top of justinrainbow/json-schema.",
+ "homepage": "https://github.com/ergebnis/json-schema-validator",
"keywords": [
"json",
- "normalizer"
+ "schema",
+ "validator"
],
- "time": "2020-01-09T13:43:00+00:00"
+ "support": {
+ "issues": "https://github.com/ergebnis/json-schema-validator/issues",
+ "security": "https://github.com/ergebnis/json-schema-validator/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json-schema-validator"
+ },
+ "time": "2025-09-06T11:37:35+00:00"
},
{
- "name": "ergebnis/json-printer",
- "version": "3.0.2",
+ "name": "justinrainbow/json-schema",
+ "version": "6.10.0",
"source": {
"type": "git",
- "url": "https://github.com/ergebnis/json-printer.git",
- "reference": "c7985dc4879777f2e4ab689da25bdd49f59dd2cb"
+ "url": "https://github.com/jsonrainbow/json-schema.git",
+ "reference": "8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/c7985dc4879777f2e4ab689da25bdd49f59dd2cb",
- "reference": "c7985dc4879777f2e4ab689da25bdd49f59dd2cb",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33",
+ "reference": "8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33",
"shasum": ""
},
"require": {
"ext-json": "*",
- "ext-mbstring": "*",
- "php": "^7.1"
+ "marc-mabe/php-enum": "^4.4",
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "ergebnis/php-cs-fixer-config": "~1.1.1",
- "ergebnis/phpstan-rules": "~0.14.1",
- "ergebnis/test-util": "~0.9.0",
- "infection/infection": "~0.13.6",
- "phpbench/phpbench": "~0.16.10",
- "phpstan/extension-installer": "^1.0.3",
- "phpstan/phpstan": "~0.11.19",
- "phpstan/phpstan-deprecation-rules": "~0.11.2",
- "phpstan/phpstan-strict-rules": "~0.11.1",
- "phpunit/phpunit": "^7.5.18"
+ "friendsofphp/php-cs-fixer": "3.3.0",
+ "json-schema/json-schema-test-suite": "dev-main",
+ "marc-mabe/php-enum-phpstan": "^2.0",
+ "phpspec/prophecy": "^1.19",
+ "phpstan/phpstan": "^1.12",
+ "phpunit/phpunit": "^8.5"
},
+ "bin": [
+ "bin/validate-json"
+ ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "6.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Ergebnis\\Json\\Printer\\": "src/"
+ "JsonSchema\\": "src/JsonSchema/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -576,380 +662,425 @@
],
"authors": [
{
- "name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
}
],
- "description": "Provides a JSON printer, allowing for flexible indentation.",
- "homepage": "https://github.com/ergebnis/json-printer",
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/jsonrainbow/json-schema",
"keywords": [
- "formatter",
"json",
- "printer"
+ "schema"
],
- "time": "2019-12-19T14:42:54+00:00"
+ "support": {
+ "issues": "https://github.com/jsonrainbow/json-schema/issues",
+ "source": "https://github.com/jsonrainbow/json-schema/tree/6.10.0"
+ },
+ "time": "2026-06-16T20:50:26+00:00"
},
{
- "name": "felixfbecker/advanced-json-rpc",
- "version": "v3.1.1",
+ "name": "localheinz/diff",
+ "version": "1.3.0",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
- "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40"
+ "url": "https://github.com/localheinz/diff.git",
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/0ed363f8de17d284d479ec813c9ad3f6834b5c40",
- "reference": "0ed363f8de17d284d479ec813c9ad3f6834b5c40",
+ "url": "https://api.github.com/repos/localheinz/diff/zipball/33bd840935970cda6691c23fc7d94ae764c0734c",
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c",
"shasum": ""
},
"require": {
- "netresearch/jsonmapper": "^1.0 || ^2.0",
- "php": ">=7.0",
- "phpdocumentor/reflection-docblock": "^4.0.0 || ^5.0.0"
+ "php": "~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.0.0"
+ "phpunit/phpunit": "^7.5.0 || ^8.5.23",
+ "symfony/process": "^4.2 || ^5"
},
"type": "library",
"autoload": {
- "psr-4": {
- "AdvancedJsonRpc\\": "lib/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
- "description": "A more advanced JSONRPC implementation",
- "time": "2020-03-11T15:21:41+00:00"
+ "description": "Fork of sebastian/diff for use with ergebnis/composer-normalize",
+ "homepage": "https://github.com/localheinz/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/localheinz/diff/issues",
+ "source": "https://github.com/localheinz/diff/tree/1.3.0"
+ },
+ "time": "2025-08-30T09:44:18+00:00"
},
{
- "name": "felixfbecker/language-server-protocol",
- "version": "v1.4.0",
+ "name": "marc-mabe/php-enum",
+ "version": "v4.7.2",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
- "reference": "378801f6139bb74ac215d81cca1272af61df9a9f"
+ "url": "https://github.com/marc-mabe/php-enum.git",
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/378801f6139bb74ac215d81cca1272af61df9a9f",
- "reference": "378801f6139bb74ac215d81cca1272af61df9a9f",
+ "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef",
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef",
"shasum": ""
},
"require": {
- "php": "^7.0"
+ "ext-reflection": "*",
+ "php": "^7.1 | ^8.0"
},
"require-dev": {
- "phpstan/phpstan": "*",
- "phpunit/phpunit": "^6.3",
- "squizlabs/php_codesniffer": "^3.1"
+ "phpbench/phpbench": "^0.16.10 || ^1.0.4",
+ "phpstan/phpstan": "^1.3.1",
+ "phpunit/phpunit": "^7.5.20 | ^8.5.22 | ^9.5.11",
+ "vimeo/psalm": "^4.17.0 | ^5.26.1"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-3.x": "3.2-dev",
+ "dev-master": "4.7-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "LanguageServerProtocol\\": "src/"
- }
+ "MabeEnum\\": "src/"
+ },
+ "classmap": [
+ "stubs/Stringable.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
+ "name": "Marc Bennewitz",
+ "email": "dev@mabe.berlin",
+ "homepage": "https://mabe.berlin/",
+ "role": "Lead"
}
],
- "description": "PHP classes for the Language Server Protocol",
+ "description": "Simple and fast implementation of enumerations with native PHP",
+ "homepage": "https://github.com/marc-mabe/php-enum",
"keywords": [
- "language",
- "microsoft",
- "php",
- "server"
- ],
- "time": "2019-06-23T21:03:50+00:00"
+ "enum",
+ "enum-map",
+ "enum-set",
+ "enumeration",
+ "enumerator",
+ "enummap",
+ "enumset",
+ "map",
+ "set",
+ "type",
+ "type-hint",
+ "typehint"
+ ],
+ "support": {
+ "issues": "https://github.com/marc-mabe/php-enum/issues",
+ "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2"
+ },
+ "time": "2025-09-14T11:18:39+00:00"
},
{
- "name": "infection/infection",
- "version": "0.15.3",
+ "name": "myclabs/deep-copy",
+ "version": "1.14.0",
"source": {
"type": "git",
- "url": "https://github.com/infection/infection.git",
- "reference": "c3fc380317eb14d213e1e1962801ee9325129fb2"
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/infection/infection/zipball/c3fc380317eb14d213e1e1962801ee9325129fb2",
- "reference": "c3fc380317eb14d213e1e1962801ee9325129fb2",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae",
+ "reference": "8680aa248f8e07bc8fb43f56f0f5fc77a0c96aae",
"shasum": ""
},
"require": {
- "composer/xdebug-handler": "^1.3.3",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "justinrainbow/json-schema": "^5.2",
- "nikic/php-parser": "^4.2.2",
- "ocramius/package-versions": "^1.2",
- "php": "^7.2.9",
- "pimple/pimple": "^3.2",
- "sebastian/diff": "^3.0.2 || ^4.0",
- "seld/jsonlint": "^1.7",
- "symfony/console": "^3.4.29 || ^4.0 || ^5.0",
- "symfony/filesystem": "^3.4.29 || ^4.0 || ^5.0",
- "symfony/finder": "^3.4.29 || ^4.0 || ^5.0",
- "symfony/process": "^3.4.29 || ^4.0 || ^5.0",
- "symfony/yaml": "^3.4.29 || ^4.0 || ^5.0",
- "thecodingmachine/safe": "^1.0",
- "webmozart/assert": "^1.3",
- "webmozart/path-util": "^2.3"
+ "php": "^8.0"
},
"conflict": {
- "symfony/console": "=4.1.5"
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
},
"require-dev": {
- "helmich/phpunit-json-assert": "^3.0",
- "phpunit/phpunit": "^8.2.5 <8.4",
- "symfony/phpunit-bridge": "^4.3.4 || ^5.0"
+ "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"
},
- "bin": [
- "bin/infection"
- ],
"type": "library",
"autoload": {
- "psr-4": {
- "Infection\\": "src/"
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Maks Rafalko",
- "email": "maks.rafalko@gmail.com",
- "homepage": "https://twitter.com/maks_rafalko"
- },
- {
- "name": "Oleg Zhulnev",
- "homepage": "https://github.com/sidz"
- },
- {
- "name": "Gert de Pagter",
- "homepage": "https://github.com/BackEndTea"
- },
- {
- "name": "Théo FIDRY",
- "email": "theo.fidry@gmail.com",
- "homepage": "https://twitter.com/tfidry"
- },
- {
- "name": "Alexey Kopytko",
- "email": "alexey@kopytko.com",
- "homepage": "https://www.alexeykopytko.com"
- },
+ "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.14.0"
+ },
+ "funding": [
{
- "name": "Andreas Möller",
- "email": "am@localheinz.com",
- "homepage": "https://localheinz.com"
+ "url": "https://github.com/mnapoli",
+ "type": "github"
}
],
- "description": "Infection is a Mutation Testing framework for PHP. The mutation adequacy score can be used to measure the effectiveness of a test set in terms of its ability to detect faults.",
- "keywords": [
- "coverage",
- "mutant",
- "mutation framework",
- "mutation testing",
- "testing",
- "unit testing"
- ],
- "time": "2020-02-16T19:33:49+00:00"
+ "time": "2026-08-11T10:17:44+00:00"
},
{
- "name": "jakub-onderka/php-console-color",
- "version": "v0.2",
+ "name": "nikic/php-parser",
+ "version": "v5.8.0",
"source": {
"type": "git",
- "url": "https://github.com/JakubOnderka/PHP-Console-Color.git",
- "reference": "d5deaecff52a0d61ccb613bb3804088da0307191"
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Color/zipball/d5deaecff52a0d61ccb613bb3804088da0307191",
- "reference": "d5deaecff52a0d61ccb613bb3804088da0307191",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
+ "reference": "044a6a392ff8ad0d61f14370a5fbbd0a0107152f",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
},
"require-dev": {
- "jakub-onderka/php-code-style": "1.0",
- "jakub-onderka/php-parallel-lint": "1.0",
- "jakub-onderka/php-var-dump-check": "0.*",
- "phpunit/phpunit": "~4.3",
- "squizlabs/php_codesniffer": "1.*"
+ "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": {
- "JakubOnderka\\PhpConsoleColor\\": "src/"
+ "PhpParser\\": "lib/PhpParser"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-2-Clause"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Jakub Onderka",
- "email": "jakub.onderka@gmail.com"
+ "name": "Nikita Popov"
}
],
- "abandoned": "php-parallel-lint/php-console-color",
- "time": "2018-09-29T17:23:10+00:00"
+ "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.8.0"
+ },
+ "time": "2026-07-04T14:30:18+00:00"
},
{
- "name": "jakub-onderka/php-console-highlighter",
- "version": "v0.4",
+ "name": "pdepend/pdepend",
+ "version": "2.16.2",
"source": {
"type": "git",
- "url": "https://github.com/JakubOnderka/PHP-Console-Highlighter.git",
- "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547"
+ "url": "https://github.com/pdepend/pdepend.git",
+ "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/JakubOnderka/PHP-Console-Highlighter/zipball/9f7a229a69d52506914b4bc61bfdb199d90c5547",
- "reference": "9f7a229a69d52506914b4bc61bfdb199d90c5547",
+ "url": "https://api.github.com/repos/pdepend/pdepend/zipball/f942b208dc2a0868454d01b29f0c75bbcfc6ed58",
+ "reference": "f942b208dc2a0868454d01b29f0c75bbcfc6ed58",
"shasum": ""
},
"require": {
- "ext-tokenizer": "*",
- "jakub-onderka/php-console-color": "~0.2",
- "php": ">=5.4.0"
+ "php": ">=5.3.7",
+ "symfony/config": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/dependency-injection": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/filesystem": "^2.3.0|^3|^4|^5|^6.0|^7.0",
+ "symfony/polyfill-mbstring": "^1.19"
},
"require-dev": {
- "jakub-onderka/php-code-style": "~1.0",
- "jakub-onderka/php-parallel-lint": "~1.0",
- "jakub-onderka/php-var-dump-check": "~0.1",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
+ "easy-doc/easy-doc": "0.0.0|^1.2.3",
+ "gregwar/rst": "^1.0",
+ "squizlabs/php_codesniffer": "^2.0.0"
},
+ "bin": [
+ "src/bin/pdepend"
+ ],
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
+ "PDepend\\": "src/main/php/PDepend"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
- "authors": [
+ "description": "Official version of pdepend to be handled with Composer",
+ "keywords": [
+ "PHP Depend",
+ "PHP_Depend",
+ "dev",
+ "pdepend"
+ ],
+ "support": {
+ "issues": "https://github.com/pdepend/pdepend/issues",
+ "source": "https://github.com/pdepend/pdepend/tree/2.16.2"
+ },
+ "funding": [
{
- "name": "Jakub Onderka",
- "email": "acci@acci.cz",
- "homepage": "http://www.acci.cz/"
+ "url": "https://tidelift.com/funding/github/packagist/pdepend/pdepend",
+ "type": "tidelift"
}
],
- "description": "Highlight PHP code in terminal",
- "abandoned": "php-parallel-lint/php-console-highlighter",
- "time": "2018-09-29T18:48:56+00:00"
+ "time": "2023-12-17T18:09:59+00:00"
},
{
- "name": "justinrainbow/json-schema",
- "version": "5.2.9",
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
"source": {
"type": "git",
- "url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "44c6787311242a979fa15c704327c20e7221a0e4"
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/44c6787311242a979fa15c704327c20e7221a0e4",
- "reference": "44c6787311242a979fa15c704327c20e7221a0e4",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
- "json-schema/json-schema-test-suite": "1.2.0",
- "phpunit/phpunit": "^4.8.35"
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
},
- "bin": [
- "bin/validate-json"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0.x-dev"
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
- "psr-4": {
- "JsonSchema\\": "src/JsonSchema/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Bruno Prieto Reis",
- "email": "bruno.p.reis@gmail.com"
- },
- {
- "name": "Justin Rainbow",
- "email": "justin.rainbow@gmail.com"
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
},
{
- "name": "Igor Wiedler",
- "email": "igor@wiedler.ch"
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
},
{
- "name": "Robert Schönthal",
- "email": "seroscho@googlemail.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
}
],
- "description": "A library to validate a json schema.",
- "homepage": "https://github.com/justinrainbow/json-schema",
- "keywords": [
- "json",
- "schema"
+ "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": "2019-09-25T14:49:45+00:00"
+ "time": "2024-03-03T12:33:53+00:00"
},
{
- "name": "localheinz/diff",
- "version": "1.0.1",
+ "name": "phar-io/version",
+ "version": "3.2.1",
"source": {
"type": "git",
- "url": "https://github.com/localheinz/diff.git",
- "reference": "bd5661db4bbed26c6f25df8851fd9f4b424a356e"
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/localheinz/diff/zipball/bd5661db4bbed26c6f25df8851fd9f4b424a356e",
- "reference": "bd5661db4bbed26c6f25df8851fd9f4b424a356e",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
"shasum": ""
},
"require": {
- "php": "^7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8.0",
- "symfony/process": "^2 || ^3.3 || ^4"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"autoload": {
@@ -963,194 +1094,293 @@
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
},
{
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
}
],
- "description": "Fork of sebastian/diff for use with ergebnis/composer-normalize",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "time": "2019-12-17T07:42:37+00:00"
+ "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": "microsoft/tolerant-php-parser",
- "version": "v0.0.20",
+ "name": "phpmd/phpmd",
+ "version": "2.15.0",
"source": {
"type": "git",
- "url": "https://github.com/microsoft/tolerant-php-parser.git",
- "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4"
+ "url": "https://github.com/phpmd/phpmd.git",
+ "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/microsoft/tolerant-php-parser/zipball/c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
- "reference": "c5e2bf5d8c9f4f27eef1370bd39ea2d1f374eeb4",
+ "url": "https://api.github.com/repos/phpmd/phpmd/zipball/74a1f56e33afad4128b886e334093e98e1b5e7c0",
+ "reference": "74a1f56e33afad4128b886e334093e98e1b5e7c0",
"shasum": ""
},
"require": {
- "php": ">=7.0"
+ "composer/xdebug-handler": "^1.0 || ^2.0 || ^3.0",
+ "ext-xml": "*",
+ "pdepend/pdepend": "^2.16.1",
+ "php": ">=5.3.9"
},
"require-dev": {
- "phpunit/phpunit": "^6.4"
+ "easy-doc/easy-doc": "0.0.0 || ^1.3.2",
+ "ext-json": "*",
+ "ext-simplexml": "*",
+ "gregwar/rst": "^1.0",
+ "mikey179/vfsstream": "^1.6.8",
+ "squizlabs/php_codesniffer": "^2.9.2 || ^3.7.2"
},
+ "bin": [
+ "src/bin/phpmd"
+ ],
"type": "library",
"autoload": {
- "psr-4": {
- "Microsoft\\PhpParser\\": [
- "src/"
- ]
+ "psr-0": {
+ "PHPMD\\": "src/main/php"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Rob Lourens",
- "email": "roblou@microsoft.com"
+ "name": "Manuel Pichler",
+ "email": "github@manuel-pichler.de",
+ "homepage": "https://github.com/manuelpichler",
+ "role": "Project Founder"
+ },
+ {
+ "name": "Marc Würth",
+ "email": "ravage@bluewin.ch",
+ "homepage": "https://github.com/ravage84",
+ "role": "Project Maintainer"
+ },
+ {
+ "name": "Other contributors",
+ "homepage": "https://github.com/phpmd/phpmd/graphs/contributors",
+ "role": "Contributors"
+ }
+ ],
+ "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
+ "homepage": "https://phpmd.org/",
+ "keywords": [
+ "dev",
+ "mess detection",
+ "mess detector",
+ "pdepend",
+ "phpmd",
+ "pmd"
+ ],
+ "support": {
+ "irc": "irc://irc.freenode.org/phpmd",
+ "issues": "https://github.com/phpmd/phpmd/issues",
+ "source": "https://github.com/phpmd/phpmd/tree/2.15.0"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpmd/phpmd",
+ "type": "tidelift"
}
],
- "description": "Tolerant PHP-to-AST parser designed for IDE usage scenarios",
- "time": "2020-02-18T02:57:19+00:00"
+ "time": "2023-12-11T08:22:20+00:00"
},
{
- "name": "myclabs/deep-copy",
- "version": "1.9.5",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
- },
+ "name": "phpstan/phpstan",
+ "version": "2.2.8",
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
- "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e285254e60f33c21902efef4a926ca0987c06804",
+ "reference": "e285254e60f33c21902efef4a926ca0987c06804",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": "^7.4|^8.0"
},
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
},
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
"type": "library",
"autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
"files": [
- "src/DeepCopy/deep_copy.php"
+ "bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Create deep copies (clones) of your objects",
+ "authors": [
+ {
+ "name": "Ondřej Mirtes"
+ },
+ {
+ "name": "Markus Staab"
+ },
+ {
+ "name": "Vincent Langlet"
+ }
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
"keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
+ "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": "2020-01-17T21:11:47+00:00"
+ "time": "2026-08-04T22:21:45+00:00"
},
{
- "name": "netresearch/jsonmapper",
- "version": "v2.1.0",
+ "name": "phpunit/php-code-coverage",
+ "version": "12.5.7",
"source": {
"type": "git",
- "url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e"
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "186dab580576598076de6818596d12b61801880e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e",
- "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/186dab580576598076de6818596d12b61801880e",
+ "reference": "186dab580576598076de6818596d12b61801880e",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.6"
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3",
+ "phpunit/php-text-template": "^5.0",
+ "sebastian/complexity": "^5.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/lines-of-code": "^4.0.1",
+ "sebastian/version": "^6.0",
+ "theseer/tokenizer": "^2.0.1"
},
"require-dev": {
- "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0",
- "squizlabs/php_codesniffer": "~3.5"
+ "phpunit/phpunit": "^12.5.28"
+ },
+ "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",
- "autoload": {
- "psr-0": {
- "JsonMapper": "src/"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "12.5.x-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "OSL-3.0"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Christian Weiske",
- "email": "cweiske@cweiske.de",
- "homepage": "http://github.com/cweiske/jsonmapper/",
- "role": "Developer"
+ "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/12.5.7"
+ },
+ "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"
}
],
- "description": "Map nested JSON structures onto PHP classes",
- "time": "2020-04-16T18:48:43+00:00"
+ "time": "2026-06-01T13:24:19+00:00"
},
{
- "name": "nikic/php-parser",
- "version": "v4.4.0",
+ "name": "phpunit/php-file-iterator",
+ "version": "6.0.1",
"source": {
"type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120"
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
- "reference": "bd43ec7152eaaab3bd8c6d0aa95ceeb1df8ee120",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
+ "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5",
"shasum": ""
},
"require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=8.3"
},
"require-dev": {
- "ircmaxell/php-yacc": "0.0.5",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
+ "phpunit/phpunit": "^12.0"
},
- "bin": [
- "bin/php-parse"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1158,264 +1388,281 @@
],
"authors": [
{
- "name": "Nikita Popov"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "A PHP parser written in PHP",
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
- "parser",
- "php"
+ "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/6.0.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/phpunit/php-file-iterator",
+ "type": "tidelift"
+ }
],
- "time": "2020-04-10T16:34:50+00:00"
+ "time": "2026-02-02T14:04:18+00:00"
},
{
- "name": "ocramius/package-versions",
- "version": "1.8.0",
+ "name": "phpunit/php-invoker",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/Ocramius/PackageVersions.git",
- "reference": "421679846270a5772534828013a93be709fb13df"
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/421679846270a5772534828013a93be709fb13df",
- "reference": "421679846270a5772534828013a93be709fb13df",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406",
+ "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^1.1.0 || ^2.0",
- "php": "^7.4.0"
+ "php": ">=8.3"
},
"require-dev": {
- "composer/composer": "^1.9.3 || ^2.0@dev",
- "doctrine/coding-standard": "^7.0.2",
- "ext-zip": "^1.15.0",
- "infection/infection": "^0.15.3",
- "phpunit/phpunit": "^9.0.1",
- "vimeo/psalm": "^3.9.3"
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^12.0"
},
- "type": "composer-plugin",
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
"extra": {
- "class": "PackageVersions\\Installer",
"branch-alias": {
- "dev-master": "1.99.x-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
- "psr-4": {
- "PackageVersions\\": "src/PackageVersions"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
- "time": "2020-04-06T17:43:35+00:00"
- },
- {
- "name": "openlss/lib-array2xml",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/nullivex/lib-array2xml.git",
- "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
- "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "LSS": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
],
- "authors": [
- {
- "name": "Bryan Tong",
- "email": "bryan@nullivex.com",
- "homepage": "https://www.nullivex.com"
- },
+ "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/6.0.0"
+ },
+ "funding": [
{
- "name": "Tony Butler",
- "email": "spudz76@gmail.com",
- "homepage": "https://www.nullivex.com"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
}
],
- "description": "Array2XML conversion library credit to lalit.org",
- "homepage": "https://www.nullivex.com",
- "keywords": [
- "array",
- "array conversion",
- "xml",
- "xml conversion"
- ],
- "time": "2019-03-29T20:06:56+00:00"
+ "time": "2025-02-07T04:58:58+00:00"
},
{
- "name": "pdepend/pdepend",
- "version": "2.7.1",
+ "name": "phpunit/php-text-template",
+ "version": "5.0.0",
"source": {
"type": "git",
- "url": "https://github.com/pdepend/pdepend.git",
- "reference": "daba1cf0a6edaf172fa02a17807ae29f4c1c7471"
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/pdepend/pdepend/zipball/daba1cf0a6edaf172fa02a17807ae29f4c1c7471",
- "reference": "daba1cf0a6edaf172fa02a17807ae29f4c1c7471",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53",
+ "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53",
"shasum": ""
},
"require": {
- "php": ">=5.3.7",
- "symfony/config": "^2.3.0|^3|^4|^5",
- "symfony/dependency-injection": "^2.3.0|^3|^4|^5",
- "symfony/filesystem": "^2.3.0|^3|^4|^5"
+ "php": ">=8.3"
},
"require-dev": {
- "easy-doc/easy-doc": "0.0.0 || ^1.2.3",
- "gregwar/rst": "^1.0",
- "phpunit/phpunit": "^4.8.35|^5.7",
- "squizlabs/php_codesniffer": "^2.0.0"
+ "phpunit/phpunit": "^12.0"
},
- "bin": [
- "src/bin/pdepend"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
- "psr-4": {
- "PDepend\\": "src/main/php/PDepend"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
- "description": "Official version of pdepend to be handled with Composer",
- "time": "2020-02-08T12:06:13+00:00"
+ "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/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-07T04:59:16+00:00"
},
{
- "name": "phan/phan",
- "version": "2.7.1",
+ "name": "phpunit/php-timer",
+ "version": "8.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phan/phan.git",
- "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77"
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phan/phan/zipball/67c51bb1593e5c30271fc16d691b82e318b90b77",
- "reference": "67c51bb1593e5c30271fc16d691b82e318b90b77",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
+ "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc",
"shasum": ""
},
"require": {
- "composer/semver": "^1.4",
- "composer/xdebug-handler": "^1.3.2",
- "ext-filter": "*",
- "ext-json": "*",
- "ext-tokenizer": "*",
- "felixfbecker/advanced-json-rpc": "^3.0.4",
- "microsoft/tolerant-php-parser": "0.0.20",
- "netresearch/jsonmapper": "^1.6.0|^2.0",
- "php": "^7.1.0",
- "sabre/event": "^5.0",
- "symfony/console": "^2.3|^3.0|^4.0|^5.0",
- "symfony/polyfill-mbstring": "^1.11.0",
- "symfony/polyfill-php72": "^1.15"
+ "php": ">=8.3"
},
"require-dev": {
- "brianium/paratest": "^4.0.0",
- "phpunit/phpunit": "^7.5.0"
+ "phpunit/phpunit": "^12.0"
},
- "suggest": {
- "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.6+ is recommended.",
- "ext-iconv": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8",
- "ext-igbinary": "Improves performance of polyfill when ext-ast is unavailable",
- "ext-mbstring": "Either iconv or mbstring is needed to ensure issue messages are valid utf-8",
- "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions."
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.0-dev"
+ }
},
- "bin": [
- "phan",
- "phan_client",
- "tocheckstyle"
- ],
- "type": "project",
"autoload": {
- "psr-4": {
- "Phan\\": "src/Phan"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Tyson Andre"
- },
- {
- "name": "Rasmus Lerdorf"
- },
- {
- "name": "Andrew S. Morrison"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "A static analyzer for PHP",
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
- "analyzer",
- "php",
- "static"
+ "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/8.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2020-04-12T01:25:29+00:00"
+ "time": "2025-02-07T04:59:38+00:00"
},
{
- "name": "phar-io/manifest",
- "version": "1.0.3",
+ "name": "phpunit/phpunit",
+ "version": "12.5.33",
"source": {
"type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4"
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
- "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b98e028a26c5c5ba7e4a54be96ccf35f2914d184",
+ "reference": "b98e028a26c5c5ba7e4a54be96ccf35f2914d184",
"shasum": ""
},
"require": {
"ext-dom": "*",
- "ext-phar": "*",
- "phar-io/version": "^2.0",
- "php": "^5.6 || ^7.0"
+ "ext-filter": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.3",
+ "phpunit/php-code-coverage": "^12.5.7",
+ "phpunit/php-file-iterator": "^6.0.1",
+ "phpunit/php-invoker": "^6.0.0",
+ "phpunit/php-text-template": "^5.0.0",
+ "phpunit/php-timer": "^8.0.0",
+ "sebastian/cli-parser": "^4.2.1",
+ "sebastian/comparator": "^7.1.8",
+ "sebastian/diff": "^7.0.0",
+ "sebastian/environment": "^8.1.2",
+ "sebastian/exporter": "^7.0.3",
+ "sebastian/global-state": "^8.0.3",
+ "sebastian/object-enumerator": "^7.0.0",
+ "sebastian/recursion-context": "^7.0.1",
+ "sebastian/type": "^6.0.4",
+ "sebastian/version": "^6.0.0",
+ "staabm/side-effects-detector": "^1.0.5"
},
+ "bin": [
+ "phpunit"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-main": "12.5-dev"
}
},
"autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
"classmap": [
"src/"
]
@@ -1425,577 +1672,757 @@
"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"
+ "role": "lead"
}
],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "time": "2018-07-08T19:23:20+00:00"
+ "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/12.5.33"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsoring.html",
+ "type": "other"
+ }
+ ],
+ "time": "2026-07-28T13:58:09+00:00"
},
{
- "name": "phar-io/version",
- "version": "2.0.1",
+ "name": "psr/container",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6"
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6",
- "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"shasum": ""
},
"require": {
- "php": "^5.6 || ^7.0"
+ "php": ">=7.4.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"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"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "description": "Library for handling version information and constraints",
- "time": "2018-07-08T19:19:57+00:00"
+ "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": "php-di/invoker",
- "version": "1.3.3",
+ "name": "psr/log",
+ "version": "3.0.2",
"source": {
"type": "git",
- "url": "https://github.com/PHP-DI/Invoker.git",
- "reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7"
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
- "reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
- "container-interop/container-interop": "~1.1"
- },
- "require-dev": {
- "athletic/athletic": "~0.1.8",
- "phpunit/phpunit": "~4.5"
+ "php": ">=8.0.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Invoker\\": "src/"
+ "Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Generic and extensible callable invoker",
- "homepage": "https://github.com/PHP-DI/Invoker",
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
"keywords": [
- "callable",
- "dependency",
- "dependency-injection",
- "injection",
- "invoke",
- "invoker"
- ],
- "time": "2016-07-14T13:09:58+00:00"
+ "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": "php-di/php-di",
- "version": "5.4.6",
+ "name": "sebastian/cli-parser",
+ "version": "4.2.1",
"source": {
"type": "git",
- "url": "https://github.com/PHP-DI/PHP-DI.git",
- "reference": "3f9255659595f3e289f473778bb6c51aa72abbbd"
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/3f9255659595f3e289f473778bb6c51aa72abbbd",
- "reference": "3f9255659595f3e289f473778bb6c51aa72abbbd",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/7d05781b13f7dec9043a629a21d086ed74582a15",
+ "reference": "7d05781b13f7dec9043a629a21d086ed74582a15",
"shasum": ""
},
"require": {
- "container-interop/container-interop": "~1.2",
- "php": ">=5.5.0",
- "php-di/invoker": "^1.3.2",
- "php-di/phpdoc-reader": "^2.0.1",
- "psr/container": "~1.0"
- },
- "provide": {
- "container-interop/container-interop-implementation": "^1.0",
- "psr/container-implementation": "^1.0"
- },
- "replace": {
- "mnapoli/php-di": "*"
+ "php": ">=8.3"
},
"require-dev": {
- "doctrine/annotations": "~1.2",
- "doctrine/cache": "~1.4",
- "mnapoli/phpunit-easymock": "~0.2.0",
- "ocramius/proxy-manager": "~1.0|~2.0",
- "phpbench/phpbench": "@dev",
- "phpunit/phpunit": "~4.5"
- },
- "suggest": {
- "doctrine/annotations": "Install it if you want to use annotations (version ~1.2)",
- "doctrine/cache": "Install it if you want to use the cache (version ~1.4)",
- "ocramius/proxy-manager": "Install it if you want to use lazy injection (version ~1.0 or ~2.0)"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "4.2-dev"
+ }
+ },
"autoload": {
- "psr-4": {
- "DI\\": "src/DI/"
- },
- "files": [
- "src/DI/functions.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
- "description": "The dependency injection container for humans",
- "homepage": "http://php-di.org/",
- "keywords": [
- "container",
- "dependency injection",
- "di"
+ "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/4.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/cli-parser",
+ "type": "tidelift"
+ }
],
- "time": "2017-12-03T08:20:27+00:00"
+ "time": "2026-05-17T05:29:34+00:00"
},
{
- "name": "php-di/phpdoc-reader",
- "version": "2.1.1",
+ "name": "sebastian/comparator",
+ "version": "7.1.8",
"source": {
"type": "git",
- "url": "https://github.com/PHP-DI/PhpDocReader.git",
- "reference": "15678f7451c020226807f520efb867ad26fbbfcf"
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "7c65c1e79836812819705b473a90c12399542485"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-DI/PhpDocReader/zipball/15678f7451c020226807f520efb867ad26fbbfcf",
- "reference": "15678f7451c020226807f520efb867ad26fbbfcf",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/7c65c1e79836812819705b473a90c12399542485",
+ "reference": "7c65c1e79836812819705b473a90c12399542485",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/diff": "^7.0",
+ "sebastian/exporter": "^7.0.3"
},
"require-dev": {
- "phpunit/phpunit": "~4.6"
+ "phpunit/phpunit": "^12.5.25"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
},
"type": "library",
- "autoload": {
- "psr-4": {
- "PhpDocReader\\": "src/PhpDocReader"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.1-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "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": "PhpDocReader parses @var and @param values in PHP docblocks (supports namespaced class names with the same resolution rules as PHP)",
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
- "phpdoc",
- "reflection"
+ "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/7.1.8"
+ },
+ "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": "2019-09-26T11:24:58+00:00"
+ "time": "2026-05-21T04:45:25+00:00"
},
{
- "name": "phpdocumentor/reflection-common",
- "version": "2.0.0",
+ "name": "sebastian/complexity",
+ "version": "5.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
- "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb",
+ "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "~6"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.x-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
+ "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/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2018-08-07T13:53:10+00:00"
+ "time": "2025-02-07T04:55:25+00:00"
},
{
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.1.0",
+ "name": "sebastian/diff",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
- "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f",
+ "reference": "7ab1ea946c012266ca32390913653d844ecd085f",
"shasum": ""
},
"require": {
- "ext-filter": "^7.1",
- "php": "^7.2",
- "phpdocumentor/reflection-common": "^2.0",
- "phpdocumentor/type-resolver": "^1.0",
- "webmozart/assert": "^1"
+ "php": ">=8.3"
},
"require-dev": {
- "doctrine/instantiator": "^1",
- "mockery/mockery": "^1"
+ "phpunit/phpunit": "^12.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.x-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
+ "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/7.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
}
],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2020-02-22T12:28:44+00:00"
+ "time": "2025-02-07T04:55:46+00:00"
},
{
- "name": "phpdocumentor/type-resolver",
- "version": "1.1.0",
+ "name": "sebastian/environment",
+ "version": "8.1.2",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
- "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/9d32c685773823b1983e256ae4ecd48a10d6e439",
+ "reference": "9d32c685773823b1983e256ae4ecd48a10d6e439",
"shasum": ""
},
"require": {
- "php": "^7.2",
- "phpdocumentor/reflection-common": "^2.0"
+ "php": ">=8.3"
},
"require-dev": {
- "ext-tokenizer": "^7.2",
- "mockery/mockery": "~1"
+ "phpunit/phpunit": "^12.5.26"
+ },
+ "suggest": {
+ "ext-posix": "*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "8.1-dev"
}
},
"autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
+ "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/8.1.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/environment",
+ "type": "tidelift"
}
],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "time": "2020-02-18T18:59:58+00:00"
+ "time": "2026-05-25T13:40:20+00:00"
},
{
- "name": "phpmd/phpmd",
- "version": "2.8.2",
+ "name": "sebastian/exporter",
+ "version": "7.0.3",
"source": {
"type": "git",
- "url": "https://github.com/phpmd/phpmd.git",
- "reference": "714629ed782537f638fe23c4346637659b779a77"
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpmd/phpmd/zipball/714629ed782537f638fe23c4346637659b779a77",
- "reference": "714629ed782537f638fe23c4346637659b779a77",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
+ "reference": "c5e21b5de653ce0a769fb36f5cdfcb5e7a32cf23",
"shasum": ""
},
"require": {
- "composer/xdebug-handler": "^1.0",
- "ext-xml": "*",
- "pdepend/pdepend": "^2.7.1",
- "php": ">=5.3.9"
+ "ext-mbstring": "*",
+ "php": ">=8.3",
+ "sebastian/recursion-context": "^7.0.1"
},
"require-dev": {
- "easy-doc/easy-doc": "0.0.0 || ^1.3.2",
- "gregwar/rst": "^1.0",
- "mikey179/vfsstream": "^1.6.4",
- "phpunit/phpunit": "^4.8.36 || ^5.7.27",
- "squizlabs/php_codesniffer": "^2.0"
+ "phpunit/phpunit": "^12.5.25"
},
- "bin": [
- "src/bin/phpmd"
- ],
"type": "library",
- "autoload": {
- "psr-0": {
- "PHPMD\\": "src/main/php"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
- "name": "Manuel Pichler",
- "email": "github@manuel-pichler.de",
- "homepage": "https://github.com/manuelpichler",
- "role": "Project Founder"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Marc Würth",
- "email": "ravage@bluewin.ch",
- "homepage": "https://github.com/ravage84",
- "role": "Project Maintainer"
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
},
{
- "name": "Other contributors",
- "homepage": "https://github.com/phpmd/phpmd/graphs/contributors",
- "role": "Contributors"
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
}
],
- "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
- "homepage": "https://phpmd.org/",
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
"keywords": [
- "mess detection",
- "mess detector",
- "pdepend",
- "phpmd",
- "pmd"
+ "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/7.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/exporter",
+ "type": "tidelift"
+ }
],
- "time": "2020-02-16T20:15:50+00:00"
+ "time": "2026-05-20T04:37:17+00:00"
},
{
- "name": "phpspec/prophecy",
- "version": "v1.10.3",
+ "name": "sebastian/global-state",
+ "version": "8.0.3",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "451c3cd1418cf640de218914901e51b064abb093"
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
- "reference": "451c3cd1418cf640de218914901e51b064abb093",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/b164d3274d6537ab462591c5755f76a8f5b1aae9",
+ "reference": "b164d3274d6537ab462591c5755f76a8f5b1aae9",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.0.2",
- "php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
- "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
- "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0.1"
},
"require-dev": {
- "phpspec/phpspec": "^2.5 || ^3.2",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
+ "ext-dom": "*",
+ "phpunit/phpunit": "^12.5.28"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.10.x-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
"keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "time": "2020-03-05T15:02:03+00:00"
- },
+ "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/8.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/global-state",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-06-01T15:10:33+00:00"
+ },
{
- "name": "phpstan/phpstan",
- "version": "0.12.19",
+ "name": "sebastian/lines-of-code",
+ "version": "4.0.1",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "054f6d76b12ba9a6c13a5a8d5fcdf51219615f4d"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/054f6d76b12ba9a6c13a5a8d5fcdf51219615f4d",
- "reference": "054f6d76b12ba9a6c13a5a8d5fcdf51219615f4d",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d543b8ef219dcd8da262cbb958639a96bedba10e",
+ "reference": "d543b8ef219dcd8da262cbb958639a96bedba10e",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.3"
},
- "conflict": {
- "phpstan/phpstan-shim": "*"
+ "require-dev": {
+ "phpunit/phpunit": "^12.5.25"
},
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.12-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
- "files": [
- "bootstrap.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
- "description": "PHPStan - PHP Static Analysis Tool",
- "time": "2020-04-19T20:35:10+00:00"
+ "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/4.0.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/lines-of-code",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-19T16:22:07+00:00"
},
{
- "name": "phpunit/php-code-coverage",
- "version": "7.0.10",
+ "name": "sebastian/object-enumerator",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f1884187926fbb755a9aaf0b3836ad3165b478bf",
- "reference": "f1884187926fbb755a9aaf0b3836ad3165b478bf",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894",
+ "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-token-stream": "^3.1.1",
- "sebastian/code-unit-reverse-lookup": "^1.0.1",
- "sebastian/environment": "^4.2.2",
- "sebastian/version": "^2.0.1",
- "theseer/tokenizer": "^1.1.3"
+ "php": ">=8.3",
+ "sebastian/object-reflector": "^5.0",
+ "sebastian/recursion-context": "^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.2.2"
- },
- "suggest": {
- "ext-xdebug": "^2.7.2"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "7.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -2010,43 +2437,48 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "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"
+ "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/7.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2019-11-20T13:55:58+00:00"
+ "time": "2025-02-07T04:57:48+00:00"
},
{
- "name": "phpunit/php-file-iterator",
- "version": "2.0.2",
+ "name": "sebastian/object-reflector",
+ "version": "5.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "050bedf145a257b1ff02746c31894800e5122946"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946",
- "reference": "050bedf145a257b1ff02746c31894800e5122946",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a",
+ "reference": "4bfa827c969c98be1e527abd576533293c634f6a",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.1"
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-main": "5.0-dev"
}
},
"autoload": {
@@ -2061,36 +2493,50 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
+ "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/5.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2018-09-13T20:33:42+00:00"
+ "time": "2025-02-07T04:58:17+00:00"
},
{
- "name": "phpunit/php-text-template",
- "version": "1.2.1",
+ "name": "sebastian/recursion-context",
+ "version": "7.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
+ "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=8.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^12.0"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "7.0-dev"
+ }
+ },
"autoload": {
"classmap": [
"src/"
@@ -2103,41 +2549,68 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
}
],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
+ "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/7.0.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/recursion-context",
+ "type": "tidelift"
+ }
],
- "time": "2015-06-21T13:50:34+00:00"
+ "time": "2025-08-13T04:44:59+00:00"
},
{
- "name": "phpunit/php-timer",
- "version": "2.1.2",
+ "name": "sebastian/type",
+ "version": "6.0.4",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "1038454804406b0b5f5f520358e78c1c2f71501e"
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1038454804406b0b5f5f520358e78c1c2f71501e",
- "reference": "1038454804406b0b5f5f520358e78c1c2f71501e",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/82ff822c2edc46724be9f7411d3163021f602773",
+ "reference": "82ff822c2edc46724be9f7411d3163021f602773",
"shasum": ""
},
"require": {
- "php": "^7.1"
+ "php": ">=8.3"
},
"require-dev": {
- "phpunit/phpunit": "^7.0"
+ "phpunit/phpunit": "^12.5.25"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -2156,38 +2629,54 @@
"role": "lead"
}
],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
+ "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/6.0.4"
+ },
+ "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": "2019-06-07T04:22:29+00:00"
+ "time": "2026-05-20T06:45:45+00:00"
},
{
- "name": "phpunit/php-token-stream",
- "version": "3.1.1",
+ "name": "sebastian/version",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/995192df77f63a59e47f025390d2d1fdf8f425ff",
- "reference": "995192df77f63a59e47f025390d2d1fdf8f425ff",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c",
+ "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c",
"shasum": ""
},
"require": {
- "ext-tokenizer": "*",
- "php": "^7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0"
+ "php": ">=8.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.1-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -2202,188 +2691,200 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
+ "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/6.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
],
- "time": "2019-09-17T06:23:10+00:00"
+ "time": "2025-02-07T05:00:38+00:00"
},
{
- "name": "phpunit/phpunit",
- "version": "8.5.3",
+ "name": "squizlabs/php_codesniffer",
+ "version": "4.0.4",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "67750516bc02f300e2742fed2f50177f8f37bedf"
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "bbdc3d0532623e21838b7041a4364383a8126f96"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/67750516bc02f300e2742fed2f50177f8f37bedf",
- "reference": "67750516bc02f300e2742fed2f50177f8f37bedf",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/bbdc3d0532623e21838b7041a4364383a8126f96",
+ "reference": "bbdc3d0532623e21838b7041a4364383a8126f96",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.2.0",
- "ext-dom": "*",
- "ext-json": "*",
"ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.9.1",
- "phar-io/manifest": "^1.0.3",
- "phar-io/version": "^2.0.1",
- "php": "^7.2",
- "phpspec/prophecy": "^1.8.1",
- "phpunit/php-code-coverage": "^7.0.7",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-timer": "^2.1.2",
- "sebastian/comparator": "^3.0.2",
- "sebastian/diff": "^3.0.2",
- "sebastian/environment": "^4.2.2",
- "sebastian/exporter": "^3.1.1",
- "sebastian/global-state": "^3.0.0",
- "sebastian/object-enumerator": "^3.0.3",
- "sebastian/resource-operations": "^2.0.1",
- "sebastian/type": "^1.1.3",
- "sebastian/version": "^2.0.1"
+ "php": ">=7.2.0"
},
"require-dev": {
- "ext-pdo": "*"
+ "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31"
},
"suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*",
- "phpunit/php-invoker": "^2.0.0"
+ "ext-iconv": "For accurate character length calculation when the checked files contain multi-byte characters.",
+ "ext-pcntl": "For parallel processing support via the --parallel CLI option."
},
"bin": [
- "phpunit"
+ "bin/phpcbf",
+ "bin/phpcs"
],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.5-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Greg Sherwood",
+ "role": "Former lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
}
],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
+ "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
"keywords": [
- "phpunit",
- "testing",
- "xunit"
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
+ }
],
- "time": "2020-03-31T08:52:04+00:00"
+ "time": "2026-08-06T02:45:27+00:00"
},
{
- "name": "pimple/pimple",
- "version": "v3.3.0",
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/silexphp/Pimple.git",
- "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930"
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930",
- "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
"shasum": ""
},
"require": {
- "php": "^7.2.5",
- "psr/container": "^1.0"
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "^3.4|^4.4|^5.0"
+ "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",
- "extra": {
- "branch-alias": {
- "dev-master": "3.3.x-dev"
- }
- },
"autoload": {
- "psr-0": {
- "Pimple": "src/"
- }
+ "classmap": [
+ "lib/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
+ "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": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "url": "https://github.com/staabm",
+ "type": "github"
}
],
- "description": "Pimple, a simple Dependency Injection Container",
- "homepage": "https://pimple.symfony.com",
- "keywords": [
- "container",
- "dependency injection"
- ],
- "time": "2020-03-03T09:12:48+00:00"
+ "time": "2024-10-20T05:08:20+00:00"
},
{
- "name": "povils/phpmnd",
- "version": "v2.2.0",
+ "name": "symfony/config",
+ "version": "v7.4.16",
"source": {
"type": "git",
- "url": "https://github.com/povils/phpmnd.git",
- "reference": "31afa4d9b64ad40ac4fd6a469619986f0c8c9697"
+ "url": "https://github.com/symfony/config.git",
+ "reference": "e896f5e874e6983d0a098f554ca82a08a924c298"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/povils/phpmnd/zipball/31afa4d9b64ad40ac4fd6a469619986f0c8c9697",
- "reference": "31afa4d9b64ad40ac4fd6a469619986f0c8c9697",
+ "url": "https://api.github.com/repos/symfony/config/zipball/e896f5e874e6983d0a098f554ca82a08a924c298",
+ "reference": "e896f5e874e6983d0a098f554ca82a08a924c298",
"shasum": ""
},
"require": {
- "jakub-onderka/php-console-highlighter": "^0.4",
- "nikic/php-parser": "^4.0",
- "php": "^7.1",
- "phpunit/php-timer": "^2.0",
- "symfony/console": "^4.0",
- "symfony/finder": "^4.0"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/filesystem": "^7.1|^8.0",
+ "symfony/polyfill-ctype": "~1.8"
},
- "require-dev": {
- "phpunit/phpunit": "^7.0",
- "squizlabs/php_codesniffer": "^2.8.1"
+ "conflict": {
+ "symfony/finder": "<6.4",
+ "symfony/service-contracts": "<2.5"
},
- "bin": [
- "bin/phpmnd"
- ],
- "type": "application",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1-dev"
- }
+ "require-dev": {
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/finder": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "Povils\\PHPMND\\": "src/"
- }
+ "Symfony\\Component\\Config\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2391,1286 +2892,82 @@
],
"authors": [
{
- "name": "Povilas Susinskas",
- "email": "povilassusinskas@gmail.com"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/config/tree/v7.4.16"
+ },
+ "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"
}
],
- "description": "A tool to detect Magic numbers in codebase",
- "time": "2020-01-12T10:30:05+00:00"
+ "time": "2026-07-30T15:04:16+00:00"
},
{
- "name": "psr/container",
- "version": "1.0.0",
+ "name": "symfony/dependency-injection",
+ "version": "v7.4.16",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
+ "url": "https://github.com/symfony/dependency-injection.git",
+ "reference": "7f59a843c1fbcceafecdf6863d3e38ea6ecd5061"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7f59a843c1fbcceafecdf6863d3e38ea6ecd5061",
+ "reference": "7f59a843c1fbcceafecdf6863d3e38ea6ecd5061",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.2",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/service-contracts": "^3.6",
+ "symfony/var-exporter": "^6.4.20|^7.2.5|^8.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://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"
- ],
- "time": "2017-02-14T16:28:37+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "time": "2020-03-23T09:12:05+00:00"
- },
- {
- "name": "sabre/event",
- "version": "5.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sabre-io/event.git",
- "reference": "d00a17507af0e7544cfe17096372f5d733e3b276"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sabre-io/event/zipball/d00a17507af0e7544cfe17096372f5d733e3b276",
- "reference": "d00a17507af0e7544cfe17096372f5d733e3b276",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
- },
- "require-dev": {
- "friendsofphp/php-cs-fixer": "~2.16.1",
- "phpunit/phpunit": "^7 || ^8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Sabre\\Event\\": "lib/"
- },
- "files": [
- "lib/coroutine.php",
- "lib/Loop/functions.php",
- "lib/Promise/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Evert Pot",
- "email": "me@evertpot.com",
- "homepage": "http://evertpot.com/",
- "role": "Developer"
- }
- ],
- "description": "sabre/event is a library for lightweight event-based programming",
- "homepage": "http://sabre.io/event/",
- "keywords": [
- "EventEmitter",
- "async",
- "coroutine",
- "eventloop",
- "events",
- "hooks",
- "plugin",
- "promise",
- "reactor",
- "signal"
- ],
- "time": "2020-01-31T18:52:29+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
- "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18",
- "shasum": ""
- },
- "require": {
- "php": "^5.6 || ^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-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/",
- "time": "2017-03-04T06:30:41+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
- "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da",
- "shasum": ""
- },
- "require": {
- "php": "^7.1",
- "sebastian/diff": "^3.0",
- "sebastian/exporter": "^3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "time": "2018-07-12T15:12:46+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "3.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
- "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8.0",
- "symfony/process": "^2 || ^3.3 || ^4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "time": "2019-02-04T06:01:07+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "4.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
- "reference": "464c90d7bdf5ad4e8a6aea15c091fec0603d4368",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.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": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "time": "2019-11-20T08:46:58+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "3.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/68609e1261d215ea5b21b7987539cbfbe156ec3e",
- "reference": "68609e1261d215ea5b21b7987539cbfbe156ec3e",
- "shasum": ""
- },
- "require": {
- "php": "^7.0",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "time": "2019-09-14T09:02:43+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
- "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4",
- "shasum": ""
- },
- "require": {
- "php": "^7.2",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^8.0"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "time": "2019-02-01T05:30:01+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5",
- "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5",
- "shasum": ""
- },
- "require": {
- "php": "^7.0",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-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/",
- "time": "2017-08-03T12:35:26+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "1.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "773f97c67f28de00d397be301821b06708fca0be"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be",
- "reference": "773f97c67f28de00d397be301821b06708fca0be",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-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/",
- "time": "2017-03-29T09:07:27+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "3.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
- "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8",
- "shasum": ""
- },
- "require": {
- "php": "^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "time": "2017-03-03T06:23:57+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
- "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9",
- "shasum": ""
- },
- "require": {
- "php": "^7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "time": "2018-10-04T04:07:39+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/3aaaa15fa71d27650d62a948be022fe3b48541a3",
- "reference": "3aaaa15fa71d27650d62a948be022fe3b48541a3",
- "shasum": ""
- },
- "require": {
- "php": "^7.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.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",
- "time": "2019-07-02T08:10:15+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "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": "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",
- "time": "2016-10-03T07:35:21+00:00"
- },
- {
- "name": "seld/jsonlint",
- "version": "1.7.2",
- "source": {
- "type": "git",
- "url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e2e5d290e4d2a4f0eb449f510071392e00e10d19",
- "reference": "e2e5d290e4d2a4f0eb449f510071392e00e10d19",
- "shasum": ""
- },
- "require": {
- "php": "^5.3 || ^7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
- },
- "bin": [
- "bin/jsonlint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Seld\\JsonLint\\": "src/Seld/JsonLint/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "JSON Linter",
- "keywords": [
- "json",
- "linter",
- "parser",
- "validator"
- ],
- "time": "2019-10-24T14:27:39+00:00"
- },
- {
- "name": "squizlabs/php_codesniffer",
- "version": "3.5.5",
- "source": {
- "type": "git",
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/73e2e7f57d958e7228fce50dc0c61f58f017f9f6",
- "reference": "73e2e7f57d958e7228fce50dc0c61f58f017f9f6",
- "shasum": ""
- },
- "require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
- },
- "bin": [
- "bin/phpcs",
- "bin/phpcbf"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Greg Sherwood",
- "role": "lead"
- }
- ],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
- "keywords": [
- "phpcs",
- "standards"
- ],
- "time": "2020-04-17T01:09:41+00:00"
- },
- {
- "name": "symfony/config",
- "version": "v5.0.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/config.git",
- "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/3e633c31a34738f7f4ed7a225c43fc45ca74c986",
- "reference": "3e633c31a34738f7f4ed7a225c43fc45ca74c986",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5",
- "symfony/filesystem": "^4.4|^5.0",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/finder": "<4.4"
- },
- "require-dev": {
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/finder": "^4.4|^5.0",
- "symfony/messenger": "^4.4|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Config\\": ""
- },
- "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": "Symfony Config Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v4.4.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
- "reference": "10bb3ee3c97308869d53b3e3d03f6ac23ff985f7",
- "shasum": ""
- },
- "require": {
- "php": "^7.1.3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.8",
- "symfony/service-contracts": "^1.1|^2"
- },
- "conflict": {
- "symfony/dependency-injection": "<3.4",
- "symfony/event-dispatcher": "<4.3|>=5",
- "symfony/lock": "<4.4",
- "symfony/process": "<3.3"
- },
- "provide": {
- "psr/log-implementation": "1.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^3.4|^4.0|^5.0",
- "symfony/dependency-injection": "^3.4|^4.0|^5.0",
- "symfony/event-dispatcher": "^4.3",
- "symfony/lock": "^4.4|^5.0",
- "symfony/process": "^3.4|^4.0|^5.0",
- "symfony/var-dumper": "^4.3|^5.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "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": "Symfony Console Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-30T11:41:10+00:00"
- },
- {
- "name": "symfony/dependency-injection",
- "version": "v5.0.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/dependency-injection.git",
- "reference": "4e48dc44680d8efa357410c78093a04753196981"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/4e48dc44680d8efa357410c78093a04753196981",
- "reference": "4e48dc44680d8efa357410c78093a04753196981",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5",
- "psr/container": "^1.0",
- "symfony/service-contracts": "^1.1.6|^2"
- },
- "conflict": {
- "symfony/config": "<5.0",
- "symfony/finder": "<4.4",
- "symfony/proxy-manager-bridge": "<4.4",
- "symfony/yaml": "<4.4"
- },
- "provide": {
- "psr/container-implementation": "1.0",
- "symfony/service-implementation": "1.0"
- },
- "require-dev": {
- "symfony/config": "^5.0",
- "symfony/expression-language": "^4.4|^5.0",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/config": "",
- "symfony/expression-language": "For using expressions in service container configuration",
- "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required",
- "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
- "symfony/yaml": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\DependencyInjection\\": ""
- },
- "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": "Symfony DependencyInjection Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-30T11:42:42+00:00"
- },
- {
- "name": "symfony/filesystem",
- "version": "v5.0.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "ca3b87dd09fff9b771731637f5379965fbfab420"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/ca3b87dd09fff9b771731637f5379965fbfab420",
- "reference": "ca3b87dd09fff9b771731637f5379965fbfab420",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5",
- "symfony/polyfill-ctype": "~1.8"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
- },
- "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": "Symfony Filesystem Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-27T16:56:45+00:00"
- },
- {
- "name": "symfony/finder",
- "version": "v4.4.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "5729f943f9854c5781984ed4907bbb817735776b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/5729f943f9854c5781984ed4907bbb817735776b",
- "reference": "5729f943f9854c5781984ed4907bbb817735776b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "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": "Symfony Finder Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-27T16:54:36+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
- "reference": "4719fa9c18b0464d399f1a63bf624b42b6fa8d14",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.15-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "time": "2020-02-27T09:26:54+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
- "reference": "81ffd3a9c6d707be22e3012b827de1c9775fc5ac",
- "shasum": ""
+ "conflict": {
+ "ext-psr": "<1.1|>=2",
+ "symfony/config": "<6.4",
+ "symfony/finder": "<6.4",
+ "symfony/yaml": "<6.4"
},
- "require": {
- "php": ">=5.3.3"
+ "provide": {
+ "psr/container-implementation": "1.1|2.0",
+ "symfony/service-implementation": "1.1|2.0|3.0"
},
- "suggest": {
- "ext-mbstring": "For best performance"
+ "require-dev": {
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/expression-language": "^6.4|^7.0|^8.0",
+ "symfony/yaml": "^6.4|^7.0|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.15-dev"
- }
- },
"autoload": {
"psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
+ "Symfony\\Component\\DependencyInjection\\": ""
},
- "files": [
- "bootstrap.php"
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -3679,112 +2976,69 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
+ "description": "Allows you to standardize and centralize the way objects are constructed in your application",
"homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2020-03-09T19:04:49+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.15.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "37b0976c78b94856543260ce09b460a7bc852747"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/37b0976c78b94856543260ce09b460a7bc852747",
- "reference": "37b0976c78b94856543260ce09b460a7bc852747",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.15-dev"
- }
+ "support": {
+ "source": "https://github.com/symfony/dependency-injection/tree/v7.4.16"
},
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
},
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "url": "https://github.com/fabpot",
+ "type": "github"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
}
],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2020-02-27T09:26:54+00:00"
+ "time": "2026-08-06T09:45:22+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.15.0",
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.7.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7"
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
- "reference": "0f27e9f464ea3da33cbe7ca3bdf4eb66def9d0f7",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/f3202fa1b5097b0af062dc978b32ecf63404e31d",
+ "reference": "f3202fa1b5097b0af062dc978b32ecf63404e31d",
"shasum": ""
},
"require": {
- "php": ">=5.3.3"
+ "php": ">=8.1"
},
"type": "library",
"extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
"branch-alias": {
- "dev-master": "1.15-dev"
+ "dev-main": "3.7-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
"files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
+ "function.php"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -3801,172 +3055,57 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "time": "2020-02-27T09:26:54+00:00"
- },
- {
- "name": "symfony/process",
- "version": "v4.4.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/3e40e87a20eaf83a1db825e1fa5097ae89042db3",
- "reference": "3e40e87a20eaf83a1db825e1fa5097ae89042db3",
- "shasum": ""
- },
- "require": {
- "php": "^7.1.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Process\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.1"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "funding": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony Process Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-27T16:54:36+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "144c5e51266b281231e947b51223ba14acf1a749"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
- "reference": "144c5e51266b281231e947b51223ba14acf1a749",
- "shasum": ""
- },
- "require": {
- "php": "^7.2.5",
- "psr/container": "^1.0"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "time": "2019-11-18T17:27:11+00:00"
+ "time": "2026-06-05T06:23:12+00:00"
},
{
- "name": "symfony/var-dumper",
- "version": "v4.4.7",
+ "name": "symfony/filesystem",
+ "version": "v7.4.15",
"source": {
"type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a"
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
- "reference": "5a0c2d93006131a36cf6f767d10e2ca8333b0d4a",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/ff16a16bf87fdf264638b8f6995b3515975e3c79",
+ "reference": "ff16a16bf87fdf264638b8f6995b3515975e3c79",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php72": "~1.5"
- },
- "conflict": {
- "phpunit/phpunit": "<4.8.35|<5.4.3,>=5.0",
- "symfony/console": "<3.4"
+ "php": ">=8.2",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
},
"require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^3.4|^4.0|^5.0",
- "symfony/process": "^4.4|^5.0",
- "twig/twig": "^1.34|^2.4|^3.0"
+ "symfony/process": "^6.4|^7.0|^8.0"
},
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
"autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
"psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
+ "Symfony\\Component\\Filesystem\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -3978,285 +3117,162 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony mechanism for exploring and dumping PHP variables",
+ "description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "time": "2020-03-27T16:54:36+00:00"
- },
- {
- "name": "symfony/yaml",
- "version": "v4.4.7",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "ef166890d821518106da3560086bfcbeb4fadfec"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/ef166890d821518106da3560086bfcbeb4fadfec",
- "reference": "ef166890d821518106da3560086bfcbeb4fadfec",
- "shasum": ""
- },
- "require": {
- "php": "^7.1.3",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/console": "<3.4"
- },
- "require-dev": {
- "symfony/console": "^3.4|^4.0|^5.0"
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v7.4.15"
},
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
},
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "url": "https://github.com/fabpot",
+ "type": "github"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
}
],
- "description": "Symfony Yaml Component",
- "homepage": "https://symfony.com",
- "time": "2020-03-30T11:41:10+00:00"
+ "time": "2026-07-22T07:36:05+00:00"
},
{
- "name": "thecodingmachine/safe",
- "version": "v1.1",
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.37.0",
"source": {
"type": "git",
- "url": "https://github.com/thecodingmachine/safe.git",
- "reference": "f440677bad66c0ef42fa3f875bf05718028af5d3"
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/f440677bad66c0ef42fa3f875bf05718028af5d3",
- "reference": "f440677bad66c0ef42fa3f875bf05718028af5d3",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
"shasum": ""
},
"require": {
"php": ">=7.2"
},
- "require-dev": {
- "phpstan/phpstan": "^0.12",
- "squizlabs/php_codesniffer": "^3.2",
- "thecodingmachine/phpstan-strict-rules": "^0.12"
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "0.1-dev"
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
- "psr-4": {
- "Safe\\": [
- "lib/",
- "generated/"
- ]
- },
"files": [
- "generated/apache.php",
- "generated/apc.php",
- "generated/apcu.php",
- "generated/array.php",
- "generated/bzip2.php",
- "generated/classobj.php",
- "generated/com.php",
- "generated/cubrid.php",
- "generated/curl.php",
- "generated/datetime.php",
- "generated/dir.php",
- "generated/eio.php",
- "generated/errorfunc.php",
- "generated/exec.php",
- "generated/fileinfo.php",
- "generated/filesystem.php",
- "generated/filter.php",
- "generated/fpm.php",
- "generated/ftp.php",
- "generated/funchand.php",
- "generated/gmp.php",
- "generated/gnupg.php",
- "generated/hash.php",
- "generated/ibase.php",
- "generated/ibmDb2.php",
- "generated/iconv.php",
- "generated/image.php",
- "generated/imap.php",
- "generated/info.php",
- "generated/ingres-ii.php",
- "generated/inotify.php",
- "generated/json.php",
- "generated/ldap.php",
- "generated/libevent.php",
- "generated/libxml.php",
- "generated/lzf.php",
- "generated/mailparse.php",
- "generated/mbstring.php",
- "generated/misc.php",
- "generated/msql.php",
- "generated/mssql.php",
- "generated/mysql.php",
- "generated/mysqli.php",
- "generated/mysqlndMs.php",
- "generated/mysqlndQc.php",
- "generated/network.php",
- "generated/oci8.php",
- "generated/opcache.php",
- "generated/openssl.php",
- "generated/outcontrol.php",
- "generated/password.php",
- "generated/pcntl.php",
- "generated/pcre.php",
- "generated/pdf.php",
- "generated/pgsql.php",
- "generated/posix.php",
- "generated/ps.php",
- "generated/pspell.php",
- "generated/readline.php",
- "generated/rrd.php",
- "generated/sem.php",
- "generated/session.php",
- "generated/shmop.php",
- "generated/simplexml.php",
- "generated/sockets.php",
- "generated/sodium.php",
- "generated/solr.php",
- "generated/spl.php",
- "generated/sqlsrv.php",
- "generated/ssdeep.php",
- "generated/ssh2.php",
- "generated/stats.php",
- "generated/stream.php",
- "generated/strings.php",
- "generated/swoole.php",
- "generated/uodbc.php",
- "generated/uopz.php",
- "generated/url.php",
- "generated/var.php",
- "generated/xdiff.php",
- "generated/xml.php",
- "generated/xmlrpc.php",
- "generated/yaml.php",
- "generated/yaz.php",
- "generated/zip.php",
- "generated/zlib.php",
- "lib/special_cases.php"
- ]
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
- "time": "2020-03-24T13:59:42+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
- "reference": "11336f6f84e16a720dae9d8e6ed5019efa85a0f9",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.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": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "time": "2019-06-13T22:48:21+00:00"
+ "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.37.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": "2026-04-10T16:19:22+00:00"
},
{
- "name": "tightenco/collect",
- "version": "v5.8.38",
+ "name": "symfony/polyfill-deepclone",
+ "version": "v1.40.0",
"source": {
"type": "git",
- "url": "https://github.com/tightenco/collect.git",
- "reference": "c93a7039e6207ad533a09109838fe80933fcc72c"
+ "url": "https://github.com/symfony/polyfill-deepclone.git",
+ "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tightenco/collect/zipball/c93a7039e6207ad533a09109838fe80933fcc72c",
- "reference": "c93a7039e6207ad533a09109838fe80933fcc72c",
+ "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/dca4ccba5f360070b574414dce4c1e7a559844fa",
+ "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "symfony/var-dumper": ">=3.4 <5"
+ "php": ">=8.1"
},
- "require-dev": {
- "mockery/mockery": "^1.0",
- "nesbot/carbon": "^1.26.3",
- "phpunit/phpunit": "^7.0"
+ "provide": {
+ "ext-deepclone": "*"
+ },
+ "suggest": {
+ "ext-deepclone": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
"files": [
- "src/Collect/Support/helpers.php",
- "src/Collect/Support/alias.php"
+ "bootstrap.php"
],
"psr-4": {
- "Tightenco\\Collect\\": "src/Collect"
- }
+ "Symfony\\Polyfill\\DeepClone\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4264,97 +3280,84 @@
],
"authors": [
{
- "name": "Taylor Otwell",
- "email": "taylorotwell@gmail.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Collect - Illuminate Collections as a separate package.",
+ "description": "Symfony polyfill for the deepclone extension",
+ "homepage": "https://symfony.com",
"keywords": [
- "collection",
- "laravel"
+ "compatibility",
+ "deepclone",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.40.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": "2019-09-17T18:57:01+00:00"
+ "time": "2026-06-12T07:27:17+00:00"
},
{
- "name": "vimeo/psalm",
- "version": "3.11.2",
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.38.2",
"source": {
"type": "git",
- "url": "https://github.com/vimeo/psalm.git",
- "reference": "d470903722cfcbc1cd04744c5491d3e6d13ec3d9"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/d470903722cfcbc1cd04744c5491d3e6d13ec3d9",
- "reference": "d470903722cfcbc1cd04744c5491d3e6d13ec3d9",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"shasum": ""
},
"require": {
- "amphp/amp": "^2.1",
- "amphp/byte-stream": "^1.5",
- "composer/semver": "^1.4",
- "composer/xdebug-handler": "^1.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "felixfbecker/advanced-json-rpc": "^3.0.3",
- "felixfbecker/language-server-protocol": "^1.4",
- "netresearch/jsonmapper": "^1.0 || ^2.0",
- "nikic/php-parser": "^4.3",
- "ocramius/package-versions": "^1.2",
- "openlss/lib-array2xml": "^1.0",
- "php": "^7.1.3|^8",
- "sebastian/diff": "^3.0 || ^4.0",
- "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0",
- "webmozart/glob": "^4.1",
- "webmozart/path-util": "^2.3"
+ "ext-iconv": "*",
+ "php": ">=7.2"
},
"provide": {
- "psalm/psalm": "self.version"
- },
- "require-dev": {
- "amphp/amp": "^2.4.2",
- "bamarni/composer-bin-plugin": "^1.2",
- "brianium/paratest": "^4.0.0",
- "ext-curl": "*",
- "php-coveralls/php-coveralls": "^2.2",
- "phpmyadmin/sql-parser": "5.1.0",
- "phpspec/prophecy": ">=1.9.0",
- "phpunit/phpunit": "^7.5.16 || ^8.5 || ^9.0",
- "psalm/plugin-phpunit": "^0.10",
- "slevomat/coding-standard": "^5.0",
- "squizlabs/php_codesniffer": "^3.5",
- "symfony/process": "^4.3"
+ "ext-mbstring": "*"
},
"suggest": {
- "ext-igbinary": "^2.0.5"
+ "ext-mbstring": "For best performance"
},
- "bin": [
- "psalm",
- "psalm-language-server",
- "psalm-plugin",
- "psalm-refactor",
- "psalter"
- ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.x-dev",
- "dev-2.x": "2.x-dev",
- "dev-1.x": "1.x-dev"
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
- "psr-4": {
- "Psalm\\Plugin\\": "src/Psalm/Plugin",
- "Psalm\\": "src/Psalm"
- },
"files": [
- "src/functions.php",
- "src/spl_object_id.php"
- ]
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4362,46 +3365,85 @@
],
"authors": [
{
- "name": "Matthew Brown"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "A static analysis tool for finding errors in PHP applications",
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
"keywords": [
- "code",
- "inspection",
- "php"
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
],
- "time": "2020-04-13T12:47:11+00:00"
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
+ },
+ "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": "2026-05-27T06:59:30+00:00"
},
{
- "name": "webmozart/assert",
- "version": "1.8.0",
+ "name": "symfony/service-contracts",
+ "version": "v3.7.1",
"source": {
"type": "git",
- "url": "https://github.com/webmozart/assert.git",
- "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6"
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
- "reference": "ab2cb0b3b559010b75981b1bdce728da3ee90ad6",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/c0a284bab1ed8aa0417e3d69250ab437739563a0",
+ "reference": "c0a284bab1ed8aa0417e3d69250ab437739563a0",
"shasum": ""
},
"require": {
- "php": "^5.3.3 || ^7.0",
- "symfony/polyfill-ctype": "^1.8"
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
- "vimeo/psalm": "<3.9.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.36 || ^7.5.13"
+ "ext-psr": "<1.1|>=2"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
+ }
+ },
"autoload": {
"psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
+ "Symfony\\Contracts\\Service\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4409,51 +3451,79 @@
],
"authors": [
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Assertions to validate method input/output with nice error messages.",
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
"keywords": [
- "assert",
- "check",
- "validate"
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.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": "2020-04-18T12:12:48+00:00"
+ "time": "2026-06-16T09:55:08+00:00"
},
{
- "name": "webmozart/glob",
- "version": "4.1.0",
+ "name": "symfony/var-exporter",
+ "version": "v8.1.4",
"source": {
"type": "git",
- "url": "https://github.com/webmozart/glob.git",
- "reference": "3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe"
+ "url": "https://github.com/symfony/var-exporter.git",
+ "reference": "6efa89335ab6d336643a807fcc89ae4f8a7a17e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/glob/zipball/3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe",
- "reference": "3cbf63d4973cf9d780b93d2da8eec7e4a9e63bbe",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/6efa89335ab6d336643a807fcc89ae4f8a7a17e9",
+ "reference": "6efa89335ab6d336643a807fcc89ae4f8a7a17e9",
"shasum": ""
},
"require": {
- "php": "^5.3.3|^7.0",
- "webmozart/path-util": "^2.2"
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-deepclone": "^1.40"
},
"require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1",
- "symfony/filesystem": "^2.5"
+ "symfony/property-access": "^7.4|^8.0",
+ "symfony/serializer": "^7.4|^8.0",
+ "symfony/var-dumper": "^7.4|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.1-dev"
- }
- },
"autoload": {
"psr-4": {
- "Webmozart\\Glob\\": "src/"
- }
+ "Symfony\\Component\\VarExporter\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -4461,73 +3531,111 @@
],
"authors": [
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools to export, instantiate, hydrate, clone and lazy-load PHP objects",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "clone",
+ "construct",
+ "deep-clone",
+ "export",
+ "hydrate",
+ "instantiate",
+ "lazy-loading",
+ "proxy",
+ "serialize"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-exporter/tree/v8.1.4"
+ },
+ "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"
}
],
- "description": "A PHP implementation of Ant's glob.",
- "time": "2015-12-29T11:14:33+00:00"
+ "time": "2026-07-30T12:40:56+00:00"
},
{
- "name": "webmozart/path-util",
- "version": "2.3.0",
+ "name": "theseer/tokenizer",
+ "version": "2.0.1",
"source": {
"type": "git",
- "url": "https://github.com/webmozart/path-util.git",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "webmozart/assert": "~1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1"
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^8.1"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
"autoload": {
- "psr-4": {
- "Webmozart\\PathUtil\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
+ "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/2.0.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
}
],
- "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
- "time": "2015-12-17T08:42:14+00:00"
+ "time": "2025-12-08T11:19:18+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": {
- "phpmd/phpmd": 0
- },
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=7.2",
- "ext-dom": "20031129",
- "ext-libxml": "^7.2"
+ "php": "^8.3",
+ "ext-dom": "*",
+ "ext-libxml": "*"
},
- "platform-dev": {
- "ext-mbstring": "^7.2"
- }
+ "platform-dev": {},
+ "plugin-api-version": "2.9.0"
}
diff --git a/cyclomatic.xml b/cyclomatic.xml
index 7831380..9d89249 100644
--- a/cyclomatic.xml
+++ b/cyclomatic.xml
@@ -14,7 +14,7 @@
1
-
+
\ No newline at end of file
diff --git a/example.php b/example.php
index 2ad4d6f..b5ad943 100644
--- a/example.php
+++ b/example.php
@@ -1,27 +1,56 @@
-isXMLStringValid($xmlString)); // 1
-print_r($validator->isXMLStringValid($xmlString, $xsdFile)); // 1
+// Validate a document, and report why it failed.
+foreach ([$xmlFile, $brokenFile, $missingFile] as $path) {
+ try {
+ $validator->validateXMLFile($path, $xsdFile);
+
+ printf("%s: valid\n", basename($path));
+ } catch (InvalidXml $exception) {
+ // Malformed, or rejected by the schema. Line and column survive.
+ printf("%s: invalid\n", basename($path));
+
+ foreach ($exception->getErrors() as $error) {
+ printf(" line %d column %d: %s\n", $error->line, $error->column, trim($error->message));
+ }
+ } catch (XmlValidatorException $exception) {
+ // Missing, unreadable or empty file.
+ printf("%s: %s: %s\n", basename($path), $exception::class, $exception->getMessage());
+ }
+}
+
+// A document you already hold goes through validateXMLString() instead.
+$xml = file_get_contents($xmlFile);
-// File validation
-print_r($validator->isXMLFileValid($xmlFile)); // 1
-print_r($validator->isXMLFileValid($xmlFile, $xsdFile)); // 1
+if ($xml === false) {
+ exit('Could not read ' . $xmlFile . PHP_EOL);
+}
-// Error handling
try {
- $validator->isXMLStringValid($dirtyXMLString, $xsdFile);
-} catch (Exceptions\InvalidXml $exception) {
- print_r($exception->getMessage()); // xmlParseEntityRef: no name\n The document has no document element.
+ $validator->validateXMLString($xml, $xsdFile);
+
+ echo "in-memory document: valid\n";
+} catch (XmlValidatorException $exception) {
+ printf("in-memory document: %s\n", $exception->getMessage());
}
+
+// When a failure needs no explanation, the predicates run the same check and
+// return false rather than throwing.
+var_dump($validator->isXMLFileValid($xmlFile, $xsdFile)); // true
+var_dump($validator->isXMLFileValid($brokenFile)); // false
+var_dump($validator->isXMLStringValid($xml)); // true
diff --git a/infection.json.dist b/infection.json.dist
deleted file mode 100644
index 60a2a84..0000000
--- a/infection.json.dist
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "timeout": 10,
- "source": {
- "directories": [
- "src"
- ]
- },
- "logs": {
- "text": "infection.log"
- },
- "mutators": {
- "@default": true
- }
-}
\ No newline at end of file
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
new file mode 100644
index 0000000..e3a5d55
--- /dev/null
+++ b/phpcs.xml.dist
@@ -0,0 +1,18 @@
+
+
+ PSR-12 across source and tests.
+
+ src
+ tests
+ example.php
+
+
+
+
+
+ tests/InvalidStreamWrapper.php
+
+
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
new file mode 100644
index 0000000..b68e083
--- /dev/null
+++ b/phpstan.neon.dist
@@ -0,0 +1,12 @@
+parameters:
+ level: max
+ paths:
+ - src
+ - tests
+ - example.php
+ # Analyse against the whole supported range, so syntax or functions that
+ # only exist in a newer PHP are caught here instead of in a consumer's
+ # 8.3 runtime.
+ phpVersion:
+ min: 80300
+ max: 80599
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
index b44c6e2..c0b65cc 100644
--- a/phpunit.xml.dist
+++ b/phpunit.xml.dist
@@ -1,16 +1,29 @@
-
-
-
- tests/
-
-
-
-
- src/
-
-
-
-
-
-
\ No newline at end of file
+
+
+
+ tests/
+
+
+
+
+
+
+
+
+
+ src/
+
+
+
diff --git a/psalm.xml b/psalm.xml
deleted file mode 100644
index 2ad6b5a..0000000
--- a/psalm.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Constants/ErrorMessages.php b/src/Constants/ErrorMessages.php
index dd9b352..0d8ed27 100644
--- a/src/Constants/ErrorMessages.php
+++ b/src/Constants/ErrorMessages.php
@@ -1,4 +1,6 @@
- $errors Empty when the failure came from this
+ * package rather than from libxml.
+ */
+ public function __construct(string $message, private readonly array $errors = [])
+ {
+ parent::__construct($message);
+ }
+
+ /**
+ * @return list
+ */
+ public function getErrors(): array
+ {
+ return $this->errors;
+ }
}
diff --git a/src/Exceptions/XmlValidatorException.php b/src/Exceptions/XmlValidatorException.php
new file mode 100644
index 0000000..c2b1c08
--- /dev/null
+++ b/src/Exceptions/XmlValidatorException.php
@@ -0,0 +1,17 @@
+path = $path;
- $this->pathExists();
- }
-
- /**
- * @return bool
* @throws FileDoesNotExist
*/
- private function pathExists(): bool
+ public function __construct(private readonly string $path)
{
- if (!file_exists($this->path)) {
+ if (! file_exists($this->path)) {
throw new FileDoesNotExist(ErrorMessages::FILE_DOES_NOT_EXIST);
}
- return true;
}
/**
- * @return string
* @throws EmptyFile
* @throws FileCouldNotBeOpenedException
*/
@@ -63,9 +40,6 @@ public function getContents(): string
return $contents;
}
- /**
- * @return string
- */
public function getPath(): string
{
return $this->path;
diff --git a/src/Types/Files/Xml.php b/src/Types/Files/Xml.php
index 5dc4921..93bf35c 100644
--- a/src/Types/Files/Xml.php
+++ b/src/Types/Files/Xml.php
@@ -1,4 +1,6 @@
-getContents();
- } catch (EmptyFile $e) {
- return false;
- } catch (FileCouldNotBeOpenedException $e) {
- return false;
- } catch (FileDoesNotExist $e) {
- return false;
- }
+ $this->validateXMLFile($xmlPath, $xsdPath);
- if ($xsdPath !== null) {
- try {
- $xsdPath = (new Xsd($xsdPath))
- ->getPath();
- } catch (FileDoesNotExist $e) {
- return false;
- }
+ return true;
+ } catch (XmlValidatorException) {
+ return false;
}
-
- return $this->isXMLStringValid($string, $xsdPath);
}
- /**
- * @param string $xml
- * @param string|null $xsdPath
- * @return bool
- */
- public function isXMLStringValid(string $xml, string $xsdPath = null): bool
+ public function isXMLStringValid(string $xml, ?string $xsdPath = null): bool
{
try {
- if (is_string($xsdPath)) {
- return $this->isXMLValid($xml, $xsdPath);
- }
- return $this->isXMLValid($xml);
- } catch (InvalidXml $e) {
+ $this->validateXMLString($xml, $xsdPath);
+
+ return true;
+ } catch (XmlValidatorException) {
return false;
}
}
- /**
- * @param string $xmlContent
- * @param string|null $xsdPath
- * @return bool
- * @throws InvalidXml
- */
- private function isXMLValid(string $xmlContent, string $xsdPath = null): bool
+ public function validateXMLFile(string $xmlPath, ?string $xsdPath = null): void
{
- self::checkEmptyWhenTrimmed($xmlContent);
+ $this->validateXMLString((new Xml($xmlPath))->getContents(), $xsdPath);
+ }
- libxml_use_internal_errors(true);
+ public function validateXMLString(string $xml, ?string $xsdPath = null): void
+ {
+ self::checkEmptyWhenTrimmed($xml);
- $document = new DOMDocument($this->version, $this->encoding);
- $document->loadXML($xmlContent);
- if (isset($xsdPath)) {
- $document->schemaValidate($xsdPath);
+ // Resolve the schema up front so a missing XSD reports as FileDoesNotExist
+ // rather than surfacing as a libxml parse error about the document.
+ if ($xsdPath !== null) {
+ $xsdPath = (new Xsd($xsdPath))->getPath();
+ }
+
+ // libxml error handling is process-global, so put it back the way we
+ // found it instead of leaving every later consumer with it switched on.
+ $previous = libxml_use_internal_errors(true);
+
+ try {
+ $document = new DOMDocument($this->version, $this->encoding);
+ $document->loadXML($xml);
+
+ if ($xsdPath !== null) {
+ $document->schemaValidate($xsdPath);
+ }
+
+ self::parseErrors(libxml_get_errors());
+ } finally {
+ libxml_clear_errors();
+ libxml_use_internal_errors($previous);
}
- $errors = libxml_get_errors();
- libxml_clear_errors();
- self::parseErrors($errors);
- return true;
}
/**
- * @param string $xmlContent
* @throws InvalidXml
*/
private static function checkEmptyWhenTrimmed(string $xmlContent): void
@@ -108,56 +91,39 @@ private static function checkEmptyWhenTrimmed(string $xmlContent): void
}
/**
- * @param array|null $errors
+ * @param list $errors
+ *
* @throws InvalidXml
*/
- private static function parseErrors(?array $errors): void
+ private static function parseErrors(array $errors): void
{
- if (!empty($errors)) {
- $reduced = array_reduce(
- $errors,
- static function (
- ?array $carry,
- LibXMLError $item
- ): array {
- $carry[] = trim($item->message);
- return $carry;
- }
- );
-
- if (!empty($reduced)) {
- throw new InvalidXml(implode(Strings::NEW_LINE, $reduced));
- }
+ if ($errors === []) {
+ return;
}
+
+ $messages = array_map(
+ static fn (LibXMLError $error): string => trim($error->message),
+ $errors
+ );
+
+ throw new InvalidXml(implode(Strings::NEW_LINE, $messages), $errors);
}
- /**
- * @return string
- */
public function getVersion(): string
{
return $this->version;
}
- /**
- * @param string $version
- */
public function setVersion(string $version): void
{
$this->version = $version;
}
- /**
- * @return string
- */
public function getEncoding(): string
{
return $this->encoding;
}
- /**
- * @param string $encoding
- */
public function setEncoding(string $encoding): void
{
$this->encoding = $encoding;
diff --git a/src/ValidatorInterface.php b/src/ValidatorInterface.php
index e828f3b..9a88e64 100644
--- a/src/ValidatorInterface.php
+++ b/src/ValidatorInterface.php
@@ -1,45 +1,53 @@
-}>
+ */
+ public static function exceptionClasses(): iterable
+ {
+ yield 'InvalidXml' => [InvalidXml::class];
+ yield 'EmptyFile' => [EmptyFile::class];
+ yield 'FileDoesNotExist' => [FileDoesNotExist::class];
+ yield 'FileCouldNotBeOpenedException' => [FileCouldNotBeOpenedException::class];
+ }
+
+ /**
+ * @param class-string $class
+ */
+ #[DataProvider('exceptionClasses')]
+ public function testEveryExceptionCarriesTheMarkerInterface(string $class): void
+ {
+ $exception = new $class('boom');
+
+ self::assertInstanceOf(XmlValidatorException::class, $exception);
+ self::assertInstanceOf(RuntimeException::class, $exception);
+ self::assertSame('boom', $exception->getMessage());
+ }
+
+ /**
+ * One catch block has to be enough, otherwise consumers write a union that
+ * silently stops covering everything the day a fifth exception is added.
+ */
+ public function testTheMarkerInterfaceCatchesEveryFailureMode(): void
+ {
+ $validator = new Validator();
+
+ /** @var array $failures */
+ $failures = [
+ 'missing file' => static function () use ($validator): void {
+ $validator->validateXMLFile(self::fixturePath('does_not_exist.xml'));
+ },
+ 'empty file' => static function () use ($validator): void {
+ $validator->validateXMLFile(self::fixturePath('empty.xml'));
+ },
+ 'malformed xml' => static function () use ($validator): void {
+ $validator->validateXMLString(self::fixture('incorrect.xml'));
+ },
+ 'missing schema' => static function () use ($validator): void {
+ $validator->validateXMLString(
+ self::fixture('correct.xml'),
+ self::fixturePath('does_not_exist.xsd')
+ );
+ },
+ 'schema violation' => static function () use ($validator): void {
+ $validator->validateXMLFile(
+ self::fixturePath('schema-violation.xml'),
+ self::fixturePath('simple.xsd')
+ );
+ },
+ ];
+
+ $caught = [];
+
+ foreach ($failures as $label => $trigger) {
+ try {
+ $trigger();
+ self::fail($label . ' should have thrown');
+ } catch (XmlValidatorException $exception) {
+ $caught[$label] = $exception::class;
+ }
+ }
+
+ self::assertSame([
+ 'missing file' => FileDoesNotExist::class,
+ 'empty file' => EmptyFile::class,
+ 'malformed xml' => InvalidXml::class,
+ 'missing schema' => FileDoesNotExist::class,
+ 'schema violation' => InvalidXml::class,
+ ], $caught);
+ }
+
+ /**
+ * The message is a summary for logs. Anything that needs to point at a
+ * location reads getErrors() instead.
+ */
+ public function testInvalidXmlKeepsTheLibxmlErrorsIntact(): void
+ {
+ $validator = new Validator();
+
+ try {
+ $validator->validateXMLString(self::fixture('incorrect.xml'));
+ self::fail('Malformed XML should have thrown');
+ } catch (InvalidXml $exception) {
+ self::assertNotEmpty($exception->getErrors());
+
+ $first = $exception->getErrors()[0];
+ self::assertGreaterThan(0, $first->line, 'libxml line number should survive');
+ self::assertStringContainsString(trim($first->message), $exception->getMessage());
+ }
+ }
+
+ public function testInvalidXmlReportsEveryLibxmlErrorInTheMessage(): void
+ {
+ $validator = new Validator();
+
+ try {
+ $validator->validateXMLFile(
+ self::fixturePath('schema-violation.xml'),
+ self::fixturePath('simple.xsd')
+ );
+ self::fail('Schema violation should have thrown');
+ } catch (InvalidXml $exception) {
+ foreach ($exception->getErrors() as $error) {
+ self::assertStringContainsString(trim($error->message), $exception->getMessage());
+ }
+ }
+ }
+
+ /**
+ * Failures raised by this package rather than libxml have nothing to list.
+ */
+ public function testInvalidXmlDefaultsToNoLibxmlErrors(): void
+ {
+ $exception = new InvalidXml('raised without libxml');
+
+ self::assertSame([], $exception->getErrors());
+ }
+}
diff --git a/tests/InvalidStreamWrapper.php b/tests/InvalidStreamWrapper.php
index a9b2128..21a00db 100644
--- a/tests/InvalidStreamWrapper.php
+++ b/tests/InvalidStreamWrapper.php
@@ -1,27 +1,51 @@
-
+ * Reported as a regular file so file_exists() succeeds and the failure
+ * surfaces on the read instead.
+ *
+ * @return array
*/
- public function url_stat(): array
+ public function url_stat(string $path, int $flags): array
{
- return [];
+ return ['mode' => 0100644, 'size' => 1];
}
}
diff --git a/tests/TestCase.php b/tests/TestCase.php
new file mode 100644
index 0000000..de7a8ed
--- /dev/null
+++ b/tests/TestCase.php
@@ -0,0 +1,33 @@
+getPath());
+ }
+
+ public function testReadsTheContentsOfAnExistingFile(): void
+ {
+ $file = new File(self::fixturePath('correct.xml'));
+
+ self::assertStringContainsString('This is better xml', $file->getContents());
+ }
+
+ public function testRejectsAPathThatDoesNotExist(): void
+ {
+ $this->expectException(FileDoesNotExist::class);
+ $this->expectExceptionMessage(ErrorMessages::FILE_DOES_NOT_EXIST);
+
+ new File(self::fixturePath('does_not_exist.xml'));
+ }
+
+ public function testRejectsAnEmptyFile(): void
+ {
+ $file = new File(self::fixturePath('empty.xml'));
+
+ $this->expectException(EmptyFile::class);
+ $this->expectExceptionMessage(ErrorMessages::EMPTY_FILE);
+
+ $file->getContents();
+ }
+
+ /**
+ * Reachable only when a path passes file_exists() but refuses to open,
+ * which is what the stream wrapper arranges.
+ */
+ public function testRejectsAFileThatCannotBeOpened(): void
+ {
+ InvalidStreamWrapper::register();
+
+ $file = new File(InvalidStreamWrapper::SCHEME . '://unreadable');
+
+ $this->expectException(FileCouldNotBeOpenedException::class);
+ $this->expectExceptionMessage(ErrorMessages::FILE_COULD_NOT_BE_OPENED);
+
+ @$file->getContents();
+ }
+
+ /**
+ * @return iterable, string}>
+ */
+ public static function fileTypes(): iterable
+ {
+ yield 'Xml' => [Xml::class, 'correct.xml'];
+ yield 'Xsd' => [Xsd::class, 'simple.xsd'];
+ }
+
+ /**
+ * @param class-string $class
+ */
+ #[DataProvider('fileTypes')]
+ public function testTypedFilesBehaveLikeTheBaseFile(string $class, string $fixture): void
+ {
+ $file = new $class(self::fixturePath($fixture));
+
+ self::assertInstanceOf(File::class, $file);
+ self::assertSame(self::fixturePath($fixture), $file->getPath());
+ self::assertNotSame('', $file->getContents());
+ }
+}
diff --git a/tests/ValidatorTest.php b/tests/ValidatorTest.php
index 0c4ac6b..f52da0a 100644
--- a/tests/ValidatorTest.php
+++ b/tests/ValidatorTest.php
@@ -1,144 +1,289 @@
-validator = new Validator();
}
+ protected function tearDown(): void
+ {
+ InvalidStreamWrapper::unregister();
+ }
+
/**
- * Encoding validations
+ * Configuration
*/
+ public function testDefaultsToXmlVersionOneAndUtf8(): void
+ {
+ self::assertSame(Strings::VERSION, $this->validator->getVersion());
+ self::assertSame(Strings::UTF_8, $this->validator->getEncoding());
+ }
+
+ public function testAcceptsVersionAndEncodingThroughTheConstructor(): void
+ {
+ $validator = new Validator('1.1', 'iso-8859-1');
+
+ self::assertSame('1.1', $validator->getVersion());
+ self::assertSame('iso-8859-1', $validator->getEncoding());
+ }
- public function testVersion(): void
+ public function testVersionCanBeChanged(): void
{
- $this->validator->setVersion(static::$version);
- self::assertEquals(static::$version, $this->validator->getVersion());
+ $this->validator->setVersion('1.1');
+
+ self::assertSame('1.1', $this->validator->getVersion());
}
- public function testEncoding(): void
+ public function testEncodingCanBeChanged(): void
{
- $this->validator->setEncoding(static::$encoding);
- self::assertEquals(static::$encoding, $this->validator->getEncoding());
+ $this->validator->setEncoding('iso-8859-1');
+
+ self::assertSame('iso-8859-1', $this->validator->getEncoding());
}
/**
- * String validations
+ * String predicates
*/
+ public function testValidXmlStringIsValid(): void
+ {
+ self::assertTrue($this->validator->isXMLStringValid(self::fixture('correct.xml')));
+ }
- public function testValidXMLString(): void
+ public function testValidXmlStringIsValidAgainstItsSchema(): void
{
- $contents = file_get_contents(static::$xmlFile);
- if (is_string($contents)) {
- self::assertTrue($this->validator->isXMLStringValid($contents));
- }
+ self::assertTrue($this->validator->isXMLStringValid(
+ self::fixture('correct.xml'),
+ self::fixturePath('simple.xsd')
+ ));
}
- public function testInvalidXMLString(): void
+ public function testMalformedXmlStringIsNotValid(): void
{
- $contents = file_get_contents(static::$incorrectXmlFile);
- if (is_string($contents)) {
- self::assertFalse($this->validator->isXMLStringValid($contents));
- }
+ self::assertFalse($this->validator->isXMLStringValid(self::fixture('incorrect.xml')));
+ }
+
+ public function testWellFormedXmlStringViolatingItsSchemaIsNotValid(): void
+ {
+ self::assertFalse($this->validator->isXMLStringValid(
+ self::fixture('schema-violation.xml'),
+ self::fixturePath('simple.xsd')
+ ));
}
- public function testEmptyXMLString(): void
+ public function testEmptyXmlStringIsNotValid(): void
{
self::assertFalse($this->validator->isXMLStringValid(''));
}
+ public function testWhitespaceOnlyXmlStringIsNotValid(): void
+ {
+ self::assertFalse($this->validator->isXMLStringValid(" \n\t "));
+ }
+
+ public function testXmlStringIsNotValidWhenTheSchemaIsMissing(): void
+ {
+ self::assertFalse($this->validator->isXMLStringValid(
+ self::fixture('correct.xml'),
+ self::fixturePath('does_not_exist.xsd')
+ ));
+ }
+
+ /**
+ * File predicates
+ */
+ public function testValidXmlFileIsValid(): void
+ {
+ self::assertTrue($this->validator->isXMLFileValid(self::fixturePath('correct.xml')));
+ }
+
+ public function testValidXmlFileIsValidAgainstItsSchema(): void
+ {
+ self::assertTrue($this->validator->isXMLFileValid(
+ self::fixturePath('correct.xml'),
+ self::fixturePath('simple.xsd')
+ ));
+ }
+
+ public function testMalformedXmlFileIsNotValid(): void
+ {
+ self::assertFalse($this->validator->isXMLFileValid(self::fixturePath('incorrect.xml')));
+ }
+
+ public function testMissingXmlFileIsNotValid(): void
+ {
+ self::assertFalse($this->validator->isXMLFileValid(self::fixturePath('does_not_exist.xml')));
+ }
+
+ public function testEmptyXmlFileIsNotValid(): void
+ {
+ self::assertFalse($this->validator->isXMLFileValid(self::fixturePath('empty.xml')));
+ }
+
+ public function testUnreadableXmlFileIsNotValid(): void
+ {
+ InvalidStreamWrapper::register();
+
+ self::assertFalse(@$this->validator->isXMLFileValid(InvalidStreamWrapper::SCHEME . '://unreadable'));
+ }
+
+ public function testXmlFileIsNotValidWhenTheSchemaIsMissing(): void
+ {
+ self::assertFalse($this->validator->isXMLFileValid(
+ self::fixturePath('correct.xml'),
+ self::fixturePath('does_not_exist.xsd')
+ ));
+ }
+
/**
- * File validations- XML
+ * Throwing variants report why
*/
+ public function testValidateXmlStringReturnsQuietlyForValidXml(): void
+ {
+ $xml = self::fixture('correct.xml');
+
+ $this->validator->validateXMLString($xml);
+
+ self::assertTrue($this->validator->isXMLStringValid($xml));
+ }
+
+ public function testValidateXmlStringRejectsMalformedXml(): void
+ {
+ $this->expectException(InvalidXml::class);
- public function testValidXMLFile(): void
+ $this->validator->validateXMLString(self::fixture('incorrect.xml'));
+ }
+
+ public function testValidateXmlStringRejectsAnEmptyDocument(): void
+ {
+ $this->expectException(InvalidXml::class);
+ $this->expectExceptionMessage(ErrorMessages::XML_EMPTY_TRIMMED);
+
+ $this->validator->validateXMLString(' ');
+ }
+
+ public function testValidateXmlStringReportsAMissingSchemaAsAMissingFile(): void
{
- self::assertTrue($this->validator->isXMLFileValid(static::$xmlFile));
+ $this->expectException(FileDoesNotExist::class);
+ $this->expectExceptionMessage(ErrorMessages::FILE_DOES_NOT_EXIST);
+
+ $this->validator->validateXMLString(
+ self::fixture('correct.xml'),
+ self::fixturePath('does_not_exist.xsd')
+ );
+ }
+
+ public function testValidateXmlFileReturnsQuietlyForValidXml(): void
+ {
+ $path = self::fixturePath('correct.xml');
+
+ $this->validator->validateXMLFile($path, self::fixturePath('simple.xsd'));
+
+ self::assertTrue($this->validator->isXMLFileValid($path));
}
- public function testNonExistentXmlFile(): void
+ public function testValidateXmlFileRejectsAMissingFile(): void
{
- self::assertFalse($this->validator->isXMLFileValid(static::$nonExistentFile));
+ $this->expectException(FileDoesNotExist::class);
+ $this->expectExceptionMessage(ErrorMessages::FILE_DOES_NOT_EXIST);
+
+ $this->validator->validateXMLFile(self::fixturePath('does_not_exist.xml'));
}
- public function testFileGetContentsFalse(): void
+ public function testValidateXmlFileRejectsAnEmptyFile(): void
{
- stream_wrapper_register('invalid', InvalidStreamWrapper::class);
- self::assertFalse(@$this->validator->isXMLFileValid('invalid://foobar'));
+ $this->expectException(EmptyFile::class);
+ $this->expectExceptionMessage(ErrorMessages::EMPTY_FILE);
+
+ $this->validator->validateXMLFile(self::fixturePath('empty.xml'));
}
- public function testEmptyXmlFile(): void
+ public function testValidateXmlFileRejectsAnUnreadableFile(): void
{
- self::assertFalse($this->validator->isXMLFileValid(static::$emptyXmlFile));
+ InvalidStreamWrapper::register();
+
+ $this->expectException(FileCouldNotBeOpenedException::class);
+ $this->expectExceptionMessage(ErrorMessages::FILE_COULD_NOT_BE_OPENED);
+
+ @$this->validator->validateXMLFile(InvalidStreamWrapper::SCHEME . '://unreadable');
}
- public function testInvalidXMLFile(): void
+ public function testValidateXmlFileRejectsASchemaViolation(): void
{
- self::assertFalse($this->validator->isXMLFileValid(static::$incorrectXmlFile));
+ $this->expectException(InvalidXml::class);
+
+ $this->validator->validateXMLFile(
+ self::fixturePath('schema-violation.xml'),
+ self::fixturePath('simple.xsd')
+ );
}
/**
- * File validations- XML with XSD
+ * The validator keeps no error state, so an instance stays reusable and
+ * shareable. It also leaves libxml's process-global settings alone.
*/
+ public function testAFailedCallDoesNotAffectTheNextOne(): void
+ {
+ self::assertFalse($this->validator->isXMLStringValid(self::fixture('incorrect.xml')));
+ self::assertTrue($this->validator->isXMLStringValid(self::fixture('correct.xml')));
+ self::assertFalse($this->validator->isXMLFileValid(self::fixturePath('does_not_exist.xml')));
+ self::assertTrue($this->validator->isXMLFileValid(self::fixturePath('correct.xml')));
+ }
- public function testValidXSDFile(): void
+ public function testLibxmlInternalErrorHandlingIsRestoredAfterSuccess(): void
{
- self::assertTrue($this->validator->isXMLFileValid(static::$xmlFile, static::$xsdFile));
+ $before = libxml_use_internal_errors();
+
+ $this->validator->validateXMLString(self::fixture('correct.xml'));
+
+ self::assertSame($before, libxml_use_internal_errors());
}
- public function testNonExistentXSDFile(): void
+ public function testLibxmlInternalErrorHandlingIsRestoredAfterFailure(): void
{
- self::assertFalse($this->validator->isXMLFileValid(static::$xmlFile, static::$nonExistentFile));
+ $before = libxml_use_internal_errors();
+
+ self::assertFalse($this->validator->isXMLStringValid(self::fixture('incorrect.xml')));
+ self::assertSame($before, libxml_use_internal_errors());
}
- public function testInvalidXSDFile(): void
+ public function testLibxmlInternalErrorHandlingIsRestoredWhenAlreadyEnabled(): void
{
- self::assertFalse($this->validator->isXMLFileValid(static::$incorrectXmlFile, static::$xsdFile));
+ $before = libxml_use_internal_errors(true);
+
+ try {
+ self::assertFalse($this->validator->isXMLStringValid(self::fixture('incorrect.xml')));
+ self::assertTrue(libxml_use_internal_errors());
+ } finally {
+ libxml_use_internal_errors($before);
+ }
}
}
diff --git a/tests/files/schema-violation.xml b/tests/files/schema-violation.xml
new file mode 100644
index 0000000..9536e0c
--- /dev/null
+++ b/tests/files/schema-violation.xml
@@ -0,0 +1,2 @@
+
+Well formed, but not the element simple.xsd declares