composer-unused / composer-unused

Show unused composer dependencies by scanning your code
MIT License
1.53k stars 54 forks source link

Uncaught exception when using GitHub and GitLab formatters #532

Closed jlherren closed 11 months ago

jlherren commented 1 year ago

Bug description

I am ignoring a package setasign/fpdi_pdf-parser, which works fine when using the default output formatter. But when using the GitHub or GitLab formatter, there's an uncaught exception. The situation is a bit special, because this package is in a private repository and needs credentials to download, but hopefully I can provide enough information to hunt down the issue. Also note that the package name contains an underscore. I don't know if this is relevant, but it seems that composer-unused normalizes these into hyphens.

This affects version 0.8.9. I can't test 0.8.8 because of #515. Version 0.8.6 worked fine for the GitLab formatter, but is also broken for the GitHub formatter.

Output of php vendor/bin/composer-unused --configuration=composer-unused.php:

 0/1 [>---------------------------]   0%
 1/1 [============================] 100%

Results
-------

Found 0 used, 0 unused, 1 ignored and 0 zombie packages

 Used packages

 Unused packages

 Ignored packages
 ○ setasign/fpdi-pdf-parser (https://www.setasign.com/downloads/<...omitted...>/FPDI_PDF-Parser-2.0.7.zip) (ignored by PatternFilter(userProvided: true, string: /^setasign\//))

 Zombies exclusions (did not match any package)

Output of php vendor/bin/composer-unused --configuration=composer-unused.php --output-format=gitlab:

 0/1 [>---------------------------]   0%
 1/1 [============================] 100%
In LinkNotFoundException.php line 13:

  Link with name "setasign/fpdi-pdf-parser" is not required

unused [-o|--output-format OUTPUT-FORMAT] [--excludeDir EXCLUDEDIR] [--excludePackage EXCLUDEPACKAGE] [--ignore-exit-code] [--no-progress] [-c|--configuration [CONFIGURATION]] [--] [<composer-json>]

The output is similar when using the GitHub formatter

Additional information

composer.json (with my download credentials omitted):

{
    "name": "test/test",
    "require": {
        "setasign/fpdi_pdf-parser": "~2.0.0"
    },
    "require-dev": {
        "icanhazstring/composer-unused": "0.8.9"
    },
    "repositories": {
        "setasign.com": {
            "type": "composer",
            "url": "https://www.setasign.com/downloads/"
        }
    },
    "config": {
        "http-basic": {
            "www.setasign.com": {
            }
        }
    }
}

composer-unused.php:

<?php
use ComposerUnused\ComposerUnused\Configuration\Configuration;
use ComposerUnused\ComposerUnused\Configuration\PatternFilter;
return static function (Configuration $config): Configuration {
    $config->addPatternFilter(PatternFilter::fromString('/^setasign\//'));
    return $config;
};

The bug is reproducible for me with just these two files.

icanhazstring commented 1 year ago

Hi @jlherren. Thanks for the report. Will take a look 🙂

icanhazstring commented 1 year ago

@jlherren can you paste the vendor/installed.json and vendor/installed.php when you require that package.

Also I probably need the source of the package to debug the what the problem with that package might be.

jlherren commented 1 year ago

Here are the two requested files (updated to icanhazstring/composer-unused 0.8.10 now). I can't share setasign/fpdi_pdf-parser publicly, but if you provide a private means of contact, I can send you a ZIP file with the entire reproduction repo (minus the credentials, but including the installed vendor/).

This is all on PHP 8.1.

vendor/installed.json ``` { "packages": [ { "name": "composer-unused/contracts", "version": "0.3.0", "version_normalized": "0.3.0.0", "source": { "type": "git", "url": "https://github.com/composer-unused/contracts.git", "reference": "5ec448d3ee80735dccad6a21a3266c377d0845ae" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer-unused/contracts/zipball/5ec448d3ee80735dccad6a21a3266c377d0845ae", "reference": "5ec448d3ee80735dccad6a21a3266c377d0845ae", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, "time": "2023-03-17T00:41:49+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "ComposerUnused\\Contracts\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Frömer", "email": "composer-unused@icanhazstring.com" } ], "description": "Contract repository for composer-unused", "support": { "issues": "https://github.com/composer-unused/contracts/issues", "source": "https://github.com/composer-unused/contracts/tree/0.3.0" }, "funding": [ { "url": "https://github.com/icanhazstring", "type": "github" } ], "install-path": "../composer-unused/contracts" }, { "name": "composer-unused/symbol-parser", "version": "0.2.1", "version_normalized": "0.2.1.0", "source": { "type": "git", "url": "https://github.com/composer-unused/symbol-parser.git", "reference": "a395a555aa38b63cadf9b2f396880ac86abb44a9" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer-unused/symbol-parser/zipball/a395a555aa38b63cadf9b2f396880ac86abb44a9", "reference": "a395a555aa38b63cadf9b2f396880ac86abb44a9", "shasum": "" }, "require": { "composer-unused/contracts": "^0.3", "nikic/php-parser": "^4.15", "php": "^7.4 || ^8.0", "phpstan/phpdoc-parser": "^1.16", "psr/container": "^1.0 || ^2.0", "psr/log": "^1.1 || ^2 || ^3", "symfony/finder": "^4.4 || ^5.3 || ^6.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.28", "ext-ds": "*", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.6.5", "roave/security-advisories": "dev-master", "squizlabs/php_codesniffer": "^3.7.2", "symfony/serializer": "^5.4" }, "time": "2023-03-17T00:45:47+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "ComposerUnused\\SymbolParser\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Frömer", "email": "composer-unused@icanhazstring.com" } ], "description": "Toolkit to parse symbols from a composer package", "homepage": "https://github.com/composer-unused/symbol-parser", "keywords": [ "composer", "parser", "symbol" ], "support": { "issues": "https://github.com/composer-unused/symbol-parser/issues", "source": "https://github.com/composer-unused/symbol-parser" }, "funding": [ { "url": "https://github.com/sponsors/icanhazstring", "type": "github" }, { "url": "https://paypal.me/icanhazstring", "type": "other" } ], "install-path": "../composer-unused/symbol-parser" }, { "name": "icanhazstring/composer-unused", "version": "0.8.10", "version_normalized": "0.8.10.0", "source": { "type": "git", "url": "https://github.com/composer-unused/composer-unused.git", "reference": "fd2624f49de2d8925355cfb8739e2b2a57017d10" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/composer-unused/composer-unused/zipball/fd2624f49de2d8925355cfb8739e2b2a57017d10", "reference": "fd2624f49de2d8925355cfb8739e2b2a57017d10", "shasum": "" }, "require": { "composer-unused/contracts": "^0.3", "composer-unused/symbol-parser": "^0.2.1", "ext-json": "*", "nikic/php-parser": "^4.15", "ondram/ci-detector": "^4.1", "php": "^7.4 || ^8.0", "phpstan/phpdoc-parser": "^1.12", "psr/container": "^1.0 || ^2.0", "psr/log": "^1.1 || ^2 || ^3", "symfony/config": "^4.4 || ^5.4 || ^6.0", "symfony/console": "^4.4 || ^5.4 || ^6.0", "symfony/dependency-injection": "^4.4.8 || ^5.4 || ^6.0", "symfony/property-access": "^4.4 || ^5.4 || ^6.0", "symfony/serializer": "^4.4 || ^5.4 || ^6.0", "webmozart/assert": "^1.10", "webmozart/glob": "^4.4" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8", "dg/bypass-finals": "^1.4", "ergebnis/composer-normalize": "^2.28", "ext-ds": "*", "ext-zend-opcache": "*", "jangregor/phpstan-prophecy": "^1.0", "php-ds/php-ds": "^1.4", "phpspec/prophecy-phpunit": "^2.0.2", "phpstan/extension-installer": "^1.3", "phpstan/phpstan": "^1.10", "phpstan/phpstan-phpunit": "^1.3", "phpunit/phpunit": "^9.6.8", "roave/security-advisories": "dev-master", "squizlabs/php_codesniffer": "^3.7" }, "time": "2023-07-06T05:41:37+00:00", "bin": [ "bin/composer-unused" ], "type": "library", "extra": { "bamarni-bin": { "bin-links": true, "forward-command": true } }, "installation-source": "dist", "autoload": { "psr-4": { "ComposerUnused\\ComposerUnused\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Andreas Frömer", "email": "composer-unused@icanhazstring.com" } ], "description": "Show unused packages by scanning your code", "homepage": "https://github.com/composer-unused/composer-unused", "keywords": [ "composer", "php-parser", "static analysis", "unused" ], "support": { "issues": "https://github.com/composer-unused/composer-unused/issues", "source": "https://github.com/composer-unused/composer-unused" }, "funding": [ { "url": "https://github.com/sponsors/icanhazstring", "type": "github" }, { "url": "https://paypal.me/icanhazstring", "type": "other" } ], "install-path": "../icanhazstring/composer-unused" }, { "name": "nikic/php-parser", "version": "v4.16.0", "version_normalized": "4.16.0.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", "reference": "19526a33fb561ef417e822e85f08a00db4059c17" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17", "reference": "19526a33fb561ef417e822e85f08a00db4059c17", "shasum": "" }, "require": { "ext-tokenizer": "*", "php": ">=7.0" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" }, "time": "2023-06-25T14:52:30+00:00", "bin": [ "bin/php-parse" ], "type": "library", "extra": { "branch-alias": { "dev-master": "4.9-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "PhpParser\\": "lib/PhpParser" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" ], "authors": [ { "name": "Nikita Popov" } ], "description": "A PHP parser written in PHP", "keywords": [ "parser", "php" ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0" }, "install-path": "../nikic/php-parser" }, { "name": "ondram/ci-detector", "version": "4.1.0", "version_normalized": "4.1.0.0", "source": { "type": "git", "url": "https://github.com/OndraM/ci-detector.git", "reference": "8a4b664e916df82ff26a44709942dfd593fa6f30" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8a4b664e916df82ff26a44709942dfd593fa6f30", "reference": "8a4b664e916df82ff26a44709942dfd593fa6f30", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.2", "lmc/coding-standard": "^1.3 || ^2.1", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0.5", "phpstan/phpstan": "^0.12.58", "phpstan/phpstan-phpunit": "^0.12.16", "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0" }, "time": "2021-04-14T09:16:52+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "OndraM\\CiDetector\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Ondřej Machulda", "email": "ondrej.machulda@gmail.com" } ], "description": "Detect continuous integration environment and provide unified access to properties of current build", "keywords": [ "CircleCI", "Codeship", "Wercker", "adapter", "appveyor", "aws", "aws codebuild", "azure", "azure devops", "azure pipelines", "bamboo", "bitbucket", "buddy", "ci-info", "codebuild", "continuous integration", "continuousphp", "devops", "drone", "github", "gitlab", "interface", "jenkins", "pipelines", "sourcehut", "teamcity", "travis" ], "support": { "issues": "https://github.com/OndraM/ci-detector/issues", "source": "https://github.com/OndraM/ci-detector/tree/4.1.0" }, "install-path": "../ondram/ci-detector" }, { "name": "phpstan/phpdoc-parser", "version": "1.22.1", "version_normalized": "1.22.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/65c39594fbd8c67abfc68bb323f86447bab79cc0", "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", "nikic/php-parser": "^4.15", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.5", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.0", "phpunit/phpunit": "^9.5", "symfony/process": "^5.2" }, "time": "2023-06-29T20:46:06+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "PHPStan\\PhpDocParser\\": [ "src/" ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", "source": "https://github.com/phpstan/phpdoc-parser/tree/1.22.1" }, "install-path": "../phpstan/phpdoc-parser" }, { "name": "psr/container", "version": "2.0.2", "version_normalized": "2.0.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", "shasum": "" }, "require": { "php": ">=7.4.0" }, "time": "2021-11-05T16:47:00+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Psr\\Container\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "https://www.php-fig.org/" } ], "description": "Common Container Interface (PHP FIG PSR-11)", "homepage": "https://github.com/php-fig/container", "keywords": [ "PSR-11", "container", "container-interface", "container-interop", "psr" ], "support": { "issues": "https://github.com/php-fig/container/issues", "source": "https://github.com/php-fig/container/tree/2.0.2" }, "install-path": "../psr/container" }, { "name": "psr/log", "version": "3.0.0", "version_normalized": "3.0.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { "php": ">=8.0.0" }, "time": "2021-07-14T16:46:02+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "3.x-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Psr\\Log\\": "src" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "PHP-FIG", "homepage": "https://www.php-fig.org/" } ], "description": "Common interface for logging libraries", "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], "support": { "source": "https://github.com/php-fig/log/tree/3.0.0" }, "install-path": "../psr/log" }, { "name": "setasign/fpdi", "version": "v2.3.7", "version_normalized": "2.3.7.0", "source": { "type": "git", "url": "https://github.com/Setasign/FPDI.git", "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/Setasign/FPDI/zipball/bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05", "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05", "shasum": "" }, "require": { "ext-zlib": "*", "php": "^5.6 || ^7.0 || ^8.0" }, "conflict": { "setasign/tfpdf": "<1.31" }, "require-dev": { "phpunit/phpunit": "~5.7", "setasign/fpdf": "~1.8", "setasign/tfpdf": "1.31", "squizlabs/php_codesniffer": "^3.5", "tecnickcom/tcpdf": "~6.2" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." }, "time": "2023-02-09T10:38:43+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "setasign\\Fpdi\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Jan Slabon", "email": "jan.slabon@setasign.com", "homepage": "https://www.setasign.com" }, { "name": "Maximilian Kresse", "email": "maximilian.kresse@setasign.com", "homepage": "https://www.setasign.com" } ], "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", "homepage": "https://www.setasign.com/fpdi", "keywords": [ "fpdf", "fpdi", "pdf" ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", "source": "https://github.com/Setasign/FPDI/tree/v2.3.7" }, "funding": [ { "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", "type": "tidelift" } ], "install-path": "../setasign/fpdi" }, { "name": "setasign/fpdi_pdf-parser", "version": "2.0.7", "version_normalized": "2.0.7.0", "dist": { "type": "zip", "url": "https://www.setasign.com/downloads/3358984/FPDI_PDF-Parser-2.0.7.zip" }, "require": { "setasign/fpdi": "^2.0" }, "time": "2021-12-06T00:00:00+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "setasign\\FpdiPdfParser\\": "src/" } }, "license": [ "proprietary" ], "support": { "email": "support@setasign.com" }, "install-path": "../setasign/fpdi_pdf-parser" }, { "name": "symfony/config", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/config.git", "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/config/zipball/a5e00dec161b08c946a2c16eed02adbeedf827ae", "reference": "a5e00dec161b08c946a2c16eed02adbeedf827ae", "shasum": "" }, "require": { "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/filesystem": "^5.4|^6.0", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/finder": "<5.4", "symfony/service-contracts": "<2.5" }, "require-dev": { "symfony/event-dispatcher": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", "symfony/messenger": "^5.4|^6.0", "symfony/service-contracts": "^2.5|^3", "symfony/yaml": "^5.4|^6.0" }, "time": "2023-04-25T10:46:17+00:00", "type": "library", "installation-source": "dist", "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": "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/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/config" }, { "name": "symfony/console", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7", "shasum": "" }, "require": { "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", "symfony/string": "^5.4|^6.0" }, "conflict": { "symfony/dependency-injection": "<5.4", "symfony/dotenv": "<5.4", "symfony/event-dispatcher": "<5.4", "symfony/lock": "<5.4", "symfony/process": "<5.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/lock": "^5.4|^6.0", "symfony/process": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0" }, "time": "2023-05-29T12:49:39+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\Console\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Eases the creation of beautiful and testable command line interfaces", "homepage": "https://symfony.com", "keywords": [ "cli", "command-line", "console", "terminal" ], "support": { "source": "https://github.com/symfony/console/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/console" }, { "name": "symfony/dependency-injection", "version": "v6.3.1", "version_normalized": "6.3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", "reference": "7abf242af21f196b65f20ab00ff251fdf3889b8d" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/7abf242af21f196b65f20ab00ff251fdf3889b8d", "reference": "7abf242af21f196b65f20ab00ff251fdf3889b8d", "shasum": "" }, "require": { "php": ">=8.1", "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3.0", "symfony/var-exporter": "^6.2.10" }, "conflict": { "ext-psr": "<1.1|>=2", "symfony/config": "<6.1", "symfony/finder": "<5.4", "symfony/proxy-manager-bridge": "<6.3", "symfony/yaml": "<5.4" }, "provide": { "psr/container-implementation": "1.1|2.0", "symfony/service-implementation": "1.1|2.0|3.0" }, "require-dev": { "symfony/config": "^6.1", "symfony/expression-language": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, "time": "2023-06-24T11:51:27+00:00", "type": "library", "installation-source": "dist", "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": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/dependency-injection/tree/v6.3.1" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/dependency-injection" }, { "name": "symfony/deprecation-contracts", "version": "v3.3.0", "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { "php": ">=8.1" }, "time": "2023-05-23T14:45:45+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", "url": "https://github.com/symfony/contracts" } }, "installation-source": "dist", "autoload": { "files": [ "function.php" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/deprecation-contracts" }, { "name": "symfony/filesystem", "version": "v6.3.1", "version_normalized": "6.3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/filesystem/zipball/edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "reference": "edd36776956f2a6fcf577edb5b05eb0e3bdc52ae", "shasum": "" }, "require": { "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-mbstring": "~1.8" }, "time": "2023-06-01T08:30:39+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\Filesystem\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/filesystem/tree/v6.3.1" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/filesystem" }, { "name": "symfony/finder", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2", "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { "symfony/filesystem": "^6.0" }, "time": "2023-04-02T01:25:41+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\Finder\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/finder/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/finder" }, { "name": "symfony/polyfill-ctype", "version": "v1.27.0", "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { "ext-ctype": "*" }, "suggest": { "ext-ctype": "For best performance" }, "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "installation-source": "dist", "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Gert de Pagter", "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "ctype", "polyfill", "portable" ], "support": { "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/polyfill-ctype" }, { "name": "symfony/polyfill-intl-grapheme", "version": "v1.27.0", "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" }, "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "installation-source": "dist", "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "grapheme", "intl", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/polyfill-intl-grapheme" }, { "name": "symfony/polyfill-intl-normalizer", "version": "v1.27.0", "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { "php": ">=7.1" }, "suggest": { "ext-intl": "For best performance" }, "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "installation-source": "dist", "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "classmap": [ "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "intl", "normalizer", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/polyfill-intl-normalizer" }, { "name": "symfony/polyfill-mbstring", "version": "v1.27.0", "version_normalized": "1.27.0.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { "ext-mbstring": "*" }, "suggest": { "ext-mbstring": "For best performance" }, "time": "2022-11-03T14:55:06+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, "installation-source": "dist", "autoload": { "files": [ "bootstrap.php" ], "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", "mbstring", "polyfill", "portable", "shim" ], "support": { "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/polyfill-mbstring" }, { "name": "symfony/property-access", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", "reference": "db9358571ce63f09c439c2fee6c12e5b090b69ac" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/property-access/zipball/db9358571ce63f09c439c2fee6c12e5b090b69ac", "reference": "db9358571ce63f09c439c2fee6c12e5b090b69ac", "shasum": "" }, "require": { "php": ">=8.1", "symfony/deprecation-contracts": "^2.5|^3", "symfony/property-info": "^5.4|^6.0" }, "require-dev": { "symfony/cache": "^5.4|^6.0" }, "time": "2023-05-19T08:06:44+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\PropertyAccess\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Fabien Potencier", "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides functions to read and write from/to an object or array using a simple string notation", "homepage": "https://symfony.com", "keywords": [ "access", "array", "extraction", "index", "injection", "object", "property", "property-path", "reflection" ], "support": { "source": "https://github.com/symfony/property-access/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/property-access" }, { "name": "symfony/property-info", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/property-info/zipball/7f3a03716112269741fe2a809f8f791a371d1fcd", "reference": "7f3a03716112269741fe2a809f8f791a371d1fcd", "shasum": "" }, "require": { "php": ">=8.1", "symfony/string": "^5.4|^6.0" }, "conflict": { "phpdocumentor/reflection-docblock": "<5.2", "phpdocumentor/type-resolver": "<1.5.1", "symfony/dependency-injection": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.10.4|^2", "phpdocumentor/reflection-docblock": "^5.2", "phpstan/phpdoc-parser": "^1.0", "symfony/cache": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/serializer": "^5.4|^6.0" }, "time": "2023-05-19T08:06:44+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\PropertyInfo\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Kévin Dunglas", "email": "dunglas@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Extracts information about PHP class' properties using metadata of popular sources", "homepage": "https://symfony.com", "keywords": [ "doctrine", "phpdoc", "property", "symfony", "type", "validator" ], "support": { "source": "https://github.com/symfony/property-info/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/property-info" }, { "name": "symfony/serializer", "version": "v6.3.1", "version_normalized": "6.3.1.0", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", "reference": "1d238ee3180bc047f8ab713bfb73848d553f4407" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/serializer/zipball/1d238ee3180bc047f8ab713bfb73848d553f4407", "reference": "1d238ee3180bc047f8ab713bfb73848d553f4407", "shasum": "" }, "require": { "php": ">=8.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "doctrine/annotations": "<1.12", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/dependency-injection": "<5.4", "symfony/property-access": "<5.4", "symfony/property-info": "<5.4", "symfony/uid": "<5.4", "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12|^2", "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", "symfony/cache": "^5.4|^6.0", "symfony/config": "^5.4|^6.0", "symfony/console": "^5.4|^6.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/error-handler": "^5.4|^6.0", "symfony/filesystem": "^5.4|^6.0", "symfony/form": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", "symfony/http-kernel": "^5.4|^6.0", "symfony/mime": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", "symfony/uid": "^5.4|^6.0", "symfony/validator": "^5.4|^6.0", "symfony/var-dumper": "^5.4|^6.0", "symfony/var-exporter": "^5.4|^6.0", "symfony/yaml": "^5.4|^6.0" }, "time": "2023-06-21T19:54:33+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\Serializer\\": "" }, "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": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { "source": "https://github.com/symfony/serializer/tree/v6.3.1" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/serializer" }, { "name": "symfony/service-contracts", "version": "v3.3.0", "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "shasum": "" }, "require": { "php": ">=8.1", "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, "time": "2023-05-23T14:45:45+00:00", "type": "library", "extra": { "branch-alias": { "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", "url": "https://github.com/symfony/contracts" } }, "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" }, "exclude-from-classmap": [ "/Test/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Generic abstractions related to writing services", "homepage": "https://symfony.com", "keywords": [ "abstractions", "contracts", "decoupling", "interfaces", "interoperability", "standards" ], "support": { "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/service-contracts" }, { "name": "symfony/string", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f", "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f", "shasum": "" }, "require": { "php": ">=8.1", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.5|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, "time": "2023-03-21T21:06:29+00:00", "type": "library", "installation-source": "dist", "autoload": { "files": [ "Resources/functions.php" ], "psr-4": { "Symfony\\Component\\String\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "homepage": "https://symfony.com", "keywords": [ "grapheme", "i18n", "string", "unicode", "utf-8", "utf8" ], "support": { "source": "https://github.com/symfony/string/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/string" }, { "name": "symfony/var-exporter", "version": "v6.3.0", "version_normalized": "6.3.0.0", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", "reference": "db5416d04269f2827d8c54331ba4cfa42620d350" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/symfony/var-exporter/zipball/db5416d04269f2827d8c54331ba4cfa42620d350", "reference": "db5416d04269f2827d8c54331ba4cfa42620d350", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { "symfony/var-dumper": "^5.4|^6.0" }, "time": "2023-04-21T08:48:44+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { "Symfony\\Component\\VarExporter\\": "" }, "exclude-from-classmap": [ "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "description": "Allows exporting any serializable PHP data structure to plain PHP code", "homepage": "https://symfony.com", "keywords": [ "clone", "construct", "export", "hydrate", "instantiate", "lazy-loading", "proxy", "serialize" ], "support": { "source": "https://github.com/symfony/var-exporter/tree/v6.3.0" }, "funding": [ { "url": "https://symfony.com/sponsor", "type": "custom" }, { "url": "https://github.com/fabpot", "type": "github" }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], "install-path": "../symfony/var-exporter" }, { "name": "webmozart/assert", "version": "1.11.0", "version_normalized": "1.11.0.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { "ext-ctype": "*", "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", "vimeo/psalm": "<4.6.1 || 4.6.2" }, "require-dev": { "phpunit/phpunit": "^8.5.13" }, "time": "2022-06-03T18:03:27+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "1.10-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Webmozart\\Assert\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "Assertions to validate method input/output with nice error messages.", "keywords": [ "assert", "check", "validate" ], "support": { "issues": "https://github.com/webmozarts/assert/issues", "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "install-path": "../webmozart/assert" }, { "name": "webmozart/glob", "version": "4.6.0", "version_normalized": "4.6.0.0", "source": { "type": "git", "url": "https://github.com/webmozarts/glob.git", "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655" }, "dist": { "type": "zip", "url": "https://api.github.com/repos/webmozarts/glob/zipball/3c17f7dec3d9d0e87b575026011f2e75a56ed655", "reference": "3c17f7dec3d9d0e87b575026011f2e75a56ed655", "shasum": "" }, "require": { "php": "^7.3 || ^8.0.0" }, "require-dev": { "phpunit/phpunit": "^9.5", "symfony/filesystem": "^5.3" }, "time": "2022-05-24T19:45:58+00:00", "type": "library", "extra": { "branch-alias": { "dev-master": "4.1-dev" } }, "installation-source": "dist", "autoload": { "psr-4": { "Webmozart\\Glob\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { "name": "Bernhard Schussek", "email": "bschussek@gmail.com" } ], "description": "A PHP implementation of Ant's glob.", "support": { "issues": "https://github.com/webmozarts/glob/issues", "source": "https://github.com/webmozarts/glob/tree/4.6.0" }, "install-path": "../webmozart/glob" } ], "dev": true, "dev-package-names": [ "composer-unused/contracts", "composer-unused/symbol-parser", "icanhazstring/composer-unused", "nikic/php-parser", "ondram/ci-detector", "phpstan/phpdoc-parser", "psr/container", "psr/log", "symfony/config", "symfony/console", "symfony/dependency-injection", "symfony/deprecation-contracts", "symfony/filesystem", "symfony/finder", "symfony/polyfill-ctype", "symfony/polyfill-intl-grapheme", "symfony/polyfill-intl-normalizer", "symfony/polyfill-mbstring", "symfony/property-access", "symfony/property-info", "symfony/serializer", "symfony/service-contracts", "symfony/string", "symfony/var-exporter", "webmozart/assert", "webmozart/glob" ] } ```
vendor/installed.php ``` array( 'name' => 'test/test', 'pretty_version' => '1.0.0+no-version-set', 'version' => '1.0.0.0', 'reference' => NULL, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => true, ), 'versions' => array( 'composer-unused/contracts' => array( 'pretty_version' => '0.3.0', 'version' => '0.3.0.0', 'reference' => '5ec448d3ee80735dccad6a21a3266c377d0845ae', 'type' => 'library', 'install_path' => __DIR__ . '/../composer-unused/contracts', 'aliases' => array(), 'dev_requirement' => true, ), 'composer-unused/symbol-parser' => array( 'pretty_version' => '0.2.1', 'version' => '0.2.1.0', 'reference' => 'a395a555aa38b63cadf9b2f396880ac86abb44a9', 'type' => 'library', 'install_path' => __DIR__ . '/../composer-unused/symbol-parser', 'aliases' => array(), 'dev_requirement' => true, ), 'icanhazstring/composer-unused' => array( 'pretty_version' => '0.8.10', 'version' => '0.8.10.0', 'reference' => 'fd2624f49de2d8925355cfb8739e2b2a57017d10', 'type' => 'library', 'install_path' => __DIR__ . '/../icanhazstring/composer-unused', 'aliases' => array(), 'dev_requirement' => true, ), 'nikic/php-parser' => array( 'pretty_version' => 'v4.16.0', 'version' => '4.16.0.0', 'reference' => '19526a33fb561ef417e822e85f08a00db4059c17', 'type' => 'library', 'install_path' => __DIR__ . '/../nikic/php-parser', 'aliases' => array(), 'dev_requirement' => true, ), 'ondram/ci-detector' => array( 'pretty_version' => '4.1.0', 'version' => '4.1.0.0', 'reference' => '8a4b664e916df82ff26a44709942dfd593fa6f30', 'type' => 'library', 'install_path' => __DIR__ . '/../ondram/ci-detector', 'aliases' => array(), 'dev_requirement' => true, ), 'phpstan/phpdoc-parser' => array( 'pretty_version' => '1.22.1', 'version' => '1.22.1.0', 'reference' => '65c39594fbd8c67abfc68bb323f86447bab79cc0', 'type' => 'library', 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', 'aliases' => array(), 'dev_requirement' => true, ), 'psr/container' => array( 'pretty_version' => '2.0.2', 'version' => '2.0.2.0', 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => true, ), 'psr/container-implementation' => array( 'dev_requirement' => true, 'provided' => array( 0 => '1.1|2.0', ), ), 'psr/log' => array( 'pretty_version' => '3.0.0', 'version' => '3.0.0.0', 'reference' => 'fe5ea303b0887d5caefd3d431c3e61ad47037001', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => true, ), 'psr/log-implementation' => array( 'dev_requirement' => true, 'provided' => array( 0 => '1.0|2.0|3.0', ), ), 'setasign/fpdi' => array( 'pretty_version' => 'v2.3.7', 'version' => '2.3.7.0', 'reference' => 'bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05', 'type' => 'library', 'install_path' => __DIR__ . '/../setasign/fpdi', 'aliases' => array(), 'dev_requirement' => false, ), 'setasign/fpdi_pdf-parser' => array( 'pretty_version' => '2.0.7', 'version' => '2.0.7.0', 'reference' => NULL, 'type' => 'library', 'install_path' => __DIR__ . '/../setasign/fpdi_pdf-parser', 'aliases' => array(), 'dev_requirement' => false, ), 'symfony/config' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => 'a5e00dec161b08c946a2c16eed02adbeedf827ae', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/config', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/console' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => '8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/console', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/dependency-injection' => array( 'pretty_version' => 'v6.3.1', 'version' => '6.3.1.0', 'reference' => '7abf242af21f196b65f20ab00ff251fdf3889b8d', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/dependency-injection', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/deprecation-contracts' => array( 'pretty_version' => 'v3.3.0', 'version' => '3.3.0.0', 'reference' => '7c3aff79d10325257a001fcf92d991f24fc967cf', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/filesystem' => array( 'pretty_version' => 'v6.3.1', 'version' => '6.3.1.0', 'reference' => 'edd36776956f2a6fcf577edb5b05eb0e3bdc52ae', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/filesystem', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/finder' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => 'd9b01ba073c44cef617c7907ce2419f8d00d75e2', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/finder', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/polyfill-ctype' => array( 'pretty_version' => 'v1.27.0', 'version' => '1.27.0.0', 'reference' => '5bbc823adecdae860bb64756d639ecfec17b050a', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-ctype', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/polyfill-intl-grapheme' => array( 'pretty_version' => 'v1.27.0', 'version' => '1.27.0.0', 'reference' => '511a08c03c1960e08a883f4cffcacd219b758354', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/polyfill-intl-normalizer' => array( 'pretty_version' => 'v1.27.0', 'version' => '1.27.0.0', 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/polyfill-mbstring' => array( 'pretty_version' => 'v1.27.0', 'version' => '1.27.0.0', 'reference' => '8ad114f6b39e2c98a8b0e3bd907732c207c2b534', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/property-access' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => 'db9358571ce63f09c439c2fee6c12e5b090b69ac', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/property-access', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/property-info' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => '7f3a03716112269741fe2a809f8f791a371d1fcd', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/property-info', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/serializer' => array( 'pretty_version' => 'v6.3.1', 'version' => '6.3.1.0', 'reference' => '1d238ee3180bc047f8ab713bfb73848d553f4407', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/serializer', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/service-contracts' => array( 'pretty_version' => 'v3.3.0', 'version' => '3.3.0.0', 'reference' => '40da9cc13ec349d9e4966ce18b5fbcd724ab10a4', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/service-contracts', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/service-implementation' => array( 'dev_requirement' => true, 'provided' => array( 0 => '1.1|2.0|3.0', ), ), 'symfony/string' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => 'f2e190ee75ff0f5eced645ec0be5c66fac81f51f', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/string', 'aliases' => array(), 'dev_requirement' => true, ), 'symfony/var-exporter' => array( 'pretty_version' => 'v6.3.0', 'version' => '6.3.0.0', 'reference' => 'db5416d04269f2827d8c54331ba4cfa42620d350', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/var-exporter', 'aliases' => array(), 'dev_requirement' => true, ), 'test/test' => array( 'pretty_version' => '1.0.0+no-version-set', 'version' => '1.0.0.0', 'reference' => NULL, 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => false, ), 'webmozart/assert' => array( 'pretty_version' => '1.11.0', 'version' => '1.11.0.0', 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/assert', 'aliases' => array(), 'dev_requirement' => true, ), 'webmozart/glob' => array( 'pretty_version' => '4.6.0', 'version' => '4.6.0.0', 'reference' => '3c17f7dec3d9d0e87b575026011f2e75a56ed655', 'type' => 'library', 'install_path' => __DIR__ . '/../webmozart/glob', 'aliases' => array(), 'dev_requirement' => true, ), ), ); ```
jlherren commented 11 months ago

I investigated this again and it looks like it's not composer-unused's fault. That Setasign package is just weird. The manifest file calls the package setasign/fpdi_pdf-parser, but its composer.json calls it setasign/fpdi-pdf-parser. It's no surprise that inconsistent names will lead to problems.

Perhaps they will react to my tweet.

As far as I'm concerned, this issue can be closed. Feel free to reopen it if you really want to support weird packages :)

EDIT: They fixed it in version 2.1.2