{"id":13462592,"url":"https://github.com/ergebnis/composer-normalize","last_synced_at":"2026-04-14T13:01:33.683Z","repository":{"id":36559357,"uuid":"117266976","full_name":"ergebnis/composer-normalize","owner":"ergebnis","description":"🎵 Provides a composer plugin for normalizing composer.json.","archived":false,"fork":false,"pushed_at":"2026-04-13T22:37:52.000Z","size":16536,"stargazers_count":1105,"open_issues_count":12,"forks_count":36,"subscribers_count":11,"default_branch":"main","last_synced_at":"2026-04-14T00:30:11.489Z","etag":null,"topics":["composer","composer-plugin","json","normalizer"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ergebnis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["ergebnis","localheinz"]}},"created_at":"2018-01-12T17:02:18.000Z","updated_at":"2026-04-13T22:37:55.000Z","dependencies_parsed_at":"2023-10-17T04:19:41.746Z","dependency_job_id":"2b3ba320-2ad0-4d07-8914-c22003086be0","html_url":"https://github.com/ergebnis/composer-normalize","commit_stats":{"total_commits":1432,"total_committers":18,"mean_commits":79.55555555555556,"dds":0.5495810055865922,"last_synced_commit":"1be53cf79e948aa0119b2fbde17844261ef0c020"},"previous_names":["localheinz/composer-normalize"],"tags_count":105,"template":false,"template_full_name":null,"purl":"pkg:github/ergebnis/composer-normalize","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergebnis%2Fcomposer-normalize","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergebnis%2Fcomposer-normalize/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergebnis%2Fcomposer-normalize/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergebnis%2Fcomposer-normalize/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ergebnis","download_url":"https://codeload.github.com/ergebnis/composer-normalize/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ergebnis%2Fcomposer-normalize/sbom","scorecard":{"id":379876,"data":{"date":"2025-08-11","repo":{"name":"github.com/ergebnis/composer-normalize","commit":"87821c55527a6a181ce71e57343bfb29f2727449"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":6.9,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Code-Review","score":5,"reason":"Found 1/2 approved changesets -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":8,"reason":"5 out of the last 5 releases have a total of 5 signed artifacts.","details":["Info: signed release artifact: composer-normalize.phar.asc: https://github.com/ergebnis/composer-normalize/releases/tag/2.47.0","Info: signed release artifact: composer-normalize.phar.asc: https://github.com/ergebnis/composer-normalize/releases/tag/2.46.0","Info: signed release artifact: composer-normalize.phar.asc: https://github.com/ergebnis/composer-normalize/releases/tag/2.45.0","Info: signed release artifact: composer-normalize.phar.asc: https://github.com/ergebnis/composer-normalize/releases/tag/2.44.0","Info: signed release artifact: composer-normalize.phar.asc: https://github.com/ergebnis/composer-normalize/releases/tag/2.43.0","Warn: release artifact 2.47.0 does not have provenance: https://api.github.com/repos/ergebnis/composer-normalize/releases/212463087","Warn: release artifact 2.46.0 does not have provenance: https://api.github.com/repos/ergebnis/composer-normalize/releases/211650643","Warn: release artifact 2.45.0 does not have provenance: https://api.github.com/repos/ergebnis/composer-normalize/releases/189020582","Warn: release artifact 2.44.0 does not have provenance: https://api.github.com/repos/ergebnis/composer-normalize/releases/177690315","Warn: release artifact 2.43.0 does not have provenance: https://api.github.com/repos/ergebnis/composer-normalize/releases/160707737"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: github.com/ergebnis/.github/.github/SECURITY.md:1","Info: Found linked content: github.com/ergebnis/.github/.github/SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: github.com/ergebnis/.github/.github/SECURITY.md:1","Info: Found text in security policy: github.com/ergebnis/.github/.github/SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T15:09:04.834Z","repository_id":36559357,"created_at":"2025-08-18T15:09:04.834Z","updated_at":"2025-08-18T15:09:04.834Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31797376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer","composer-plugin","json","normalizer"],"created_at":"2024-07-31T12:00:53.055Z","updated_at":"2026-04-14T13:01:33.670Z","avatar_url":"https://github.com/ergebnis.png","language":"PHP","funding_links":["https://github.com/sponsors/ergebnis","https://github.com/sponsors/localheinz"],"categories":["Uncategorized","Tools","PHP","Table of Contents","目录","Ecosystem"],"sub_categories":["Uncategorized","Support","Dependency Management Extras","依赖关系管理临时演员 dependency-management-extras","Dependency Management"],"readme":"# composer-normalize\n\n[![Integrate](https://github.com/ergebnis/composer-normalize/actions/workflows/integrate.yaml/badge.svg?branch=main)](https://github.com/ergebnis/composer-normalize/actions/workflows/integrate.yaml)\n[![Merge](https://github.com/ergebnis/composer-normalize/actions/workflows/merge.yaml/badge.svg)](https://github.com/ergebnis/composer-normalize/actions/workflows/merge.yaml)\n[![Release](https://github.com/ergebnis/composer-normalize/actions/workflows/release.yaml/badge.svg)](https://github.com/ergebnis/composer-normalize/actions/workflows/release.yaml)\n[![Renew](https://github.com/ergebnis/composer-normalize/actions/workflows/renew.yaml/badge.svg)](https://github.com/ergebnis/composer-normalize/actions/workflows/renew.yaml)\n\n[![Code Coverage](https://codecov.io/gh/ergebnis/composer-normalize/branch/main/graph/badge.svg)](https://codecov.io/gh/ergebnis/composer-normalize)\n\n[![Latest Stable Version](https://poser.pugx.org/ergebnis/composer-normalize/v/stable)](https://packagist.org/packages/ergebnis/composer-normalize)\n[![Total Downloads](https://poser.pugx.org/ergebnis/composer-normalize/downloads)](https://packagist.org/packages/ergebnis/composer-normalize)\n[![Monthly Downloads](http://poser.pugx.org/ergebnis/composer-normalize/d/monthly)](https://packagist.org/packages/ergebnis/composer-normalize)\n\nThis project provides a [`composer`](https://getcomposer.org) plugin for normalizing [`composer.json`](https://getcomposer.org/doc/04-schema.md).\n\n[![Hmm, kinda cool I guess](https://user-images.githubusercontent.com/605483/150120621-1eb65e19-b924-481c-a9e5-e762f1f3cfc9.png)](https://github.com/laravel/laravel/pull/4856#issuecomment-439705243)\n\n## Why\n\nWhen it comes to formatting `composer.json`, you have the following options:\n\n- you can format it manually (and request changes when contributors format it differently)\n- you can stop caring\n- or you can use `ergebnis/composer-normalize`\n\n`ergebnis/composer-normalize` normalizes `composer.json`, so you don't have to.\n\n:bulb: If you want to find out more, take a look at the [examples](#examples) and read this [blog post](https://localheinz.com/blog/2018/01/15/normalizing-composer.json/).\n\n## Installation\n\n### Composer\n\nRun\n\n```sh\ncomposer require --dev ergebnis/composer-normalize\n```\n\nto install `ergebnis/composer-normalize` as a composer plugin.\n\nRun\n\n```shell\ncomposer config allow-plugins.ergebnis/composer-normalize true\n```\n\nto allow `ergebnis/composer-normalize` to run as a composer plugin.\n\n:bulb: The `allow-plugins` has been added to `composer/composer` to add an extra layer of security.\n\nFor reference, see\n\n- https://github.com/composer/composer/pull/10314\n- https://getcomposer.org/doc/06-config.md#allow-plugins\n\n### Phar\n\nHead over to http://github.com/ergebnis/composer-normalize/releases/latest and download the latest `composer-normalize.phar`.\n\nRun\n\n```sh\nchmod +x composer-normalize.phar\n```\n\nto make the downloaded `composer-normalize.phar` executable.\n\n### Phive\n\nRun\n\n```sh\nphive install ergebnis/composer-normalize\n```\n\nto install `ergebnis/composer-normalize` with [PHIVE](https://phar.io).\n\n## Usage\n\n### Composer\n\nRun\n\n```sh\ncomposer normalize\n```\n\nto normalize `composer.json` in the working directory.\n\n### Phar\n\nRun\n\n```sh\n./composer-normalize.phar\n```\n\nto normalize `composer.json` in the working directory.\n\n### Phive\n\nRun\n\n```sh\n./tools/composer-normalize\n```\n\nto normalize `composer.json` in the working directory.\n\n### Details\n\nThe `NormalizeCommand` provided by the `NormalizePlugin` within this package will\n\n- determine whether a `composer.json` exists\n- determine whether a `composer.lock` exists, and if so, whether it is up to date (unless the `--no-check-lock` option is used)\n- use [`Ergebnis\\Json\\Normalizer\\Vendor\\Composer\\ComposerJsonNormalizer`](https://github.com/ergebnis/json-normalizer#vendorcomposercomposerjsonnormalizer) to normalize the content of `composer.json`\n- format the normalized content (either as sniffed, or as specified using the `--indent-size` and `--indent-style` options)\n- write the normalized and formatted content of `composer.json` back to the file\n- update the hash in `composer.lock` if it exists and if an update is necessary\n\n### Arguments\n\n- `file`: Path to `composer.json` file (optional, defaults to `composer.json` in working directory)\n\n### Options\n\n- `--diff`: Show the results of normalizing\n- `--dry-run`: Show the results of normalizing, but do not modify any files\n- `--indent-size`: Indent size (an integer greater than 0); should be used with the `--indent-style` option\n- `--indent-style`: Indent style (one of \"space\", \"tab\"); should be used with the `--indent-size` option\n- `--no-check-lock`: Do not check if lock file is up to date\n- `--no-update-lock`: Do not update lock file if it exists\n\nAs an alternative to specifying the `--indent-size` and `--indent-style` options, you can also use composer [extra](https://getcomposer.org/doc/04-schema.md#extra) to configure these options in `composer.json`:\n\n```json\n{\n  \"extra\": {\n    \"composer-normalize\": {\n      \"indent-size\": 2,\n      \"indent-style\": \"space\"\n    }\n  }\n}\n```\n\n:bulb: The configuration provided in composer extra always overrides the configuration provided via command line options.\n\n### Continuous Integration\n\nIf you want to run this in continuous integration services, use the `--dry-run` option.\n\n```sh\ncomposer normalize --dry-run\n```\n\nIn case `composer.json` is not normalized (or `composer.lock` is not up-to-date), the command will\nfail with an exit code of `1` and show a diff.\n\n## Examples\n\n### `pestphp/pest`\n\nRunning\n\n```sh\ncomposer normalize\n```\n\nagainst https://github.com/pestphp/pest/blob/v0.3.19/composer.json yields the following diff:\n\n```diff\ndiff --git a/composer.json b/composer.json\nindex 1cfbf1e..204f20f 100644\n--- a/composer.json\n+++ b/composer.json\n@@ -25,6 +25,32 @@\n         \"pestphp/pest-plugin-init\": \"^0.3\",\n         \"phpunit/phpunit\": \"\u003e= 9.3.7 \u003c= 9.5.0\"\n     },\n+    \"require-dev\": {\n+        \"illuminate/console\": \"^7.16.1\",\n+        \"illuminate/support\": \"^7.16.1\",\n+        \"laravel/dusk\": \"^6.9.1\",\n+        \"mockery/mockery\": \"^1.4.1\",\n+        \"pestphp/pest-dev-tools\": \"dev-master\"\n+    },\n+    \"config\": {\n+        \"preferred-install\": \"dist\",\n+        \"sort-packages\": true\n+    },\n+    \"extra\": {\n+        \"branch-alias\": {\n+            \"dev-master\": \"0.3.x-dev\"\n+        },\n+        \"laravel\": {\n+            \"providers\": [\n+                \"Pest\\\\Laravel\\\\PestServiceProvider\"\n+            ]\n+        },\n+        \"pest\": {\n+            \"plugins\": [\n+                \"Pest\\\\Plugins\\\\Version\"\n+            ]\n+        }\n+    },\n     \"autoload\": {\n         \"psr-4\": {\n             \"Pest\\\\\": \"src/\"\n@@ -42,49 +68,23 @@\n             \"tests/Autoload.php\"\n         ]\n     },\n-    \"require-dev\": {\n-        \"illuminate/console\": \"^7.16.1\",\n-        \"illuminate/support\": \"^7.16.1\",\n-        \"laravel/dusk\": \"^6.9.1\",\n-        \"mockery/mockery\": \"^1.4.1\",\n-        \"pestphp/pest-dev-tools\": \"dev-master\"\n-    },\n     \"minimum-stability\": \"dev\",\n     \"prefer-stable\": true,\n-    \"config\": {\n-        \"sort-packages\": true,\n-        \"preferred-install\": \"dist\"\n-    },\n     \"bin\": [\n         \"bin/pest\"\n     ],\n     \"scripts\": {\n         \"lint\": \"php-cs-fixer fix -v\",\n-        \"test:lint\": \"php-cs-fixer fix -v --dry-run\",\n-        \"test:types\": \"phpstan analyse --ansi --memory-limit=0\",\n-        \"test:unit\": \"php bin/pest --colors=always --exclude-group=integration\",\n-        \"test:integration\": \"php bin/pest --colors=always --group=integration\",\n-        \"update:snapshots\": \"REBUILD_SNAPSHOTS=true php bin/pest --colors=always\",\n         \"test\": [\n             \"@test:lint\",\n             \"@test:types\",\n             \"@test:unit\",\n             \"@test:integration\"\n-        ]\n-    },\n-    \"extra\": {\n-        \"branch-alias\": {\n-            \"dev-master\": \"0.3.x-dev\"\n-        },\n-        \"pest\": {\n-            \"plugins\": [\n-                \"Pest\\\\Plugins\\\\Version\"\n-            ]\n-        },\n-        \"laravel\": {\n-            \"providers\": [\n-                \"Pest\\\\Laravel\\\\PestServiceProvider\"\n-            ]\n-        }\n+        ],\n+        \"test:integration\": \"php bin/pest --colors=always --group=integration\",\n+        \"test:lint\": \"php-cs-fixer fix -v --dry-run\",\n+        \"test:types\": \"phpstan analyse --ansi --memory-limit=0\",\n+        \"test:unit\": \"php bin/pest --colors=always --exclude-group=integration\",\n+        \"update:snapshots\": \"REBUILD_SNAPSHOTS=true php bin/pest --colors=always\"\n     }\n }\n```\n\n### `phpspec/phpspec`\n\nRunning\n\n```sh\ncomposer normalize\n```\n\nagainst https://github.com/phpspec/phpspec/blob/7.0.1/composer.json yields the following diff:\n\n```diff\ndiff --git a/composer.json b/composer.json\nindex 90150a37..276a2ecd 100644\n--- a/composer.json\n+++ b/composer.json\n@@ -1,72 +1,73 @@\n {\n-    \"name\":         \"phpspec/phpspec\",\n-    \"description\":  \"Specification-oriented BDD framework for PHP 7.1+\",\n-    \"keywords\":     [\"BDD\", \"SpecBDD\", \"TDD\", \"spec\", \"specification\", \"tests\", \"testing\"],\n-    \"homepage\":     \"http://phpspec.net/\",\n-    \"type\":         \"library\",\n-    \"license\":      \"MIT\",\n-    \"authors\":      [\n+    \"name\": \"phpspec/phpspec\",\n+    \"type\": \"library\",\n+    \"description\": \"Specification-oriented BDD framework for PHP 7.1+\",\n+    \"keywords\": [\n+        \"BDD\",\n+        \"SpecBDD\",\n+        \"TDD\",\n+        \"spec\",\n+        \"specification\",\n+        \"tests\",\n+        \"testing\"\n+    ],\n+    \"homepage\": \"http://phpspec.net/\",\n+    \"license\": \"MIT\",\n+    \"authors\": [\n         {\n-            \"name\":      \"Konstantin Kudryashov\",\n-            \"email\":     \"ever.zet@gmail.com\",\n-            \"homepage\":  \"http://everzet.com\"\n+            \"name\": \"Konstantin Kudryashov\",\n+            \"email\": \"ever.zet@gmail.com\",\n+            \"homepage\": \"http://everzet.com\"\n         },\n         {\n-            \"name\":      \"Marcello Duarte\",\n-            \"homepage\":  \"http://marcelloduarte.net/\"\n+            \"name\": \"Marcello Duarte\",\n+            \"homepage\": \"http://marcelloduarte.net/\"\n         },\n         {\n-            \"name\":      \"Ciaran McNulty\",\n-            \"homepage\":  \"https://ciaranmcnulty.com/\"\n+            \"name\": \"Ciaran McNulty\",\n+            \"homepage\": \"https://ciaranmcnulty.com/\"\n         }\n     ],\n-\n     \"require\": {\n-        \"php\":                      \"^7.3 || 8.0.*\",\n-        \"phpspec/prophecy\":         \"^1.9\",\n-        \"phpspec/php-diff\":         \"^1.0.0\",\n-        \"sebastian/exporter\":       \"^3.0 || ^4.0\",\n-        \"symfony/console\":          \"^3.4 || ^4.4 || ^5.0\",\n+        \"php\": \"^7.3 || 8.0.*\",\n+        \"ext-tokenizer\": \"*\",\n+        \"doctrine/instantiator\": \"^1.0.5\",\n+        \"phpspec/php-diff\": \"^1.0.0\",\n+        \"phpspec/prophecy\": \"^1.9\",\n+        \"sebastian/exporter\": \"^3.0 || ^4.0\",\n+        \"symfony/console\": \"^3.4 || ^4.4 || ^5.0\",\n         \"symfony/event-dispatcher\": \"^3.4 || ^4.4 || ^5.0\",\n-        \"symfony/process\":          \"^3.4 || ^4.4 || ^5.0\",\n-        \"symfony/finder\":           \"^3.4 || ^4.4 || ^5.0\",\n-        \"symfony/yaml\":             \"^3.4 || ^4.4 || ^5.0\",\n-        \"doctrine/instantiator\":    \"^1.0.5\",\n-        \"ext-tokenizer\":            \"*\"\n+        \"symfony/finder\": \"^3.4 || ^4.4 || ^5.0\",\n+        \"symfony/process\": \"^3.4 || ^4.4 || ^5.0\",\n+        \"symfony/yaml\": \"^3.4 || ^4.4 || ^5.0\"\n+    },\n+    \"conflict\": {\n+        \"sebastian/comparator\": \"\u003c1.2.4\"\n     },\n-\n     \"require-dev\": {\n-        \"behat/behat\":           \"^3.3\",\n-        \"symfony/filesystem\":    \"^3.4 || ^4.0 || ^5.0\",\n-        \"phpunit/phpunit\":       \"^8.0 || ^9.0\"\n+        \"behat/behat\": \"^3.3\",\n+        \"phpunit/phpunit\": \"^8.0 || ^9.0\",\n+        \"symfony/filesystem\": \"^3.4 || ^4.0 || ^5.0\"\n     },\n-\n     \"suggest\": {\n         \"phpspec/nyan-formatters\": \"Adds Nyan formatters\"\n     },\n-\n-    \"conflict\": {\n-        \"sebastian/comparator\" : \"\u003c1.2.4\"\n+    \"extra\": {\n+        \"branch-alias\": {\n+            \"dev-main\": \"7.0.x-dev\"\n+        }\n     },\n-\n     \"autoload\": {\n         \"psr-0\": {\n             \"PhpSpec\": \"src/\"\n         }\n     },\n-\n     \"autoload-dev\": {\n         \"psr-0\": {\n             \"spec\\\\PhpSpec\": \".\"\n         }\n     },\n-\n-    \"bin\": [\"bin/phpspec\"],\n-\n-    \"extra\": {\n-        \"branch-alias\": {\n-            \"dev-main\": \"7.0.x-dev\"\n-        }\n-    }\n-\n+    \"bin\": [\n+        \"bin/phpspec\"\n+    ]\n }\n```\n\n### `phpunit/phpunit`\n\nRunning\n\n```sh\ncomposer normalize\n```\n\nagainst https://github.com/sebastianbergmann/phpunit/blob/9.5.0/composer.json yields the following diff:\n\n```diff\ndiff --git a/composer.json b/composer.json\nindex fd6461fc3..23c3a3596 100644\n--- a/composer.json\n+++ b/composer.json\n@@ -1,7 +1,7 @@\n {\n     \"name\": \"phpunit/phpunit\",\n-    \"description\": \"The PHP Unit Testing framework.\",\n     \"type\": \"library\",\n+    \"description\": \"The PHP Unit Testing framework.\",\n     \"keywords\": [\n         \"phpunit\",\n         \"xunit\",\n@@ -16,10 +16,6 @@\n             \"role\": \"lead\"\n         }\n     ],\n-    \"support\": {\n-        \"issues\": \"https://github.com/sebastianbergmann/phpunit/issues\"\n-    },\n-    \"prefer-stable\": true,\n     \"require\": {\n         \"php\": \"\u003e=7.3\",\n         \"ext-dom\": \"*\",\n@@ -54,20 +50,22 @@\n         \"ext-PDO\": \"*\",\n         \"phpspec/prophecy-phpunit\": \"^2.0.1\"\n     },\n+    \"suggest\": {\n+        \"ext-soap\": \"*\",\n+        \"ext-xdebug\": \"*\"\n+    },\n     \"config\": {\n+        \"optimize-autoloader\": true,\n         \"platform\": {\n             \"php\": \"7.3.0\"\n         },\n-        \"optimize-autoloader\": true,\n         \"sort-packages\": true\n     },\n-    \"suggest\": {\n-        \"ext-soap\": \"*\",\n-        \"ext-xdebug\": \"*\"\n+    \"extra\": {\n+        \"branch-alias\": {\n+            \"dev-master\": \"9.5-dev\"\n+        }\n     },\n-    \"bin\": [\n-        \"phpunit\"\n-    ],\n     \"autoload\": {\n         \"classmap\": [\n             \"src/\"\n@@ -86,9 +84,11 @@\n             \"tests/_files/NamespaceCoveredFunction.php\"\n         ]\n     },\n-    \"extra\": {\n-        \"branch-alias\": {\n-            \"dev-master\": \"9.5-dev\"\n-        }\n+    \"prefer-stable\": true,\n+    \"bin\": [\n+        \"phpunit\"\n+    ],\n+    \"support\": {\n+        \"issues\": \"https://github.com/sebastianbergmann/phpunit/issues\"\n     }\n }\n```\n\n## Changelog\n\nThe maintainers of this project record notable changes to this project in a [changelog](CHANGELOG.md).\n\n## Contributing\n\nThe maintainers of this project suggest following the [contribution guide](.github/CONTRIBUTING.md).\n\n## Code of Conduct\n\nThe maintainers of this project ask contributors to follow the [code of conduct](https://github.com/ergebnis/.github/blob/main/CODE_OF_CONDUCT.md).\n\n## General Support Policy\n\nThe maintainers of this project provide limited support.\n\nYou can support the maintenance of this project by [sponsoring @ergebnis](https://github.com/sponsors/ergebnis).\n\n## PHP Version Support Policy\n\nThis project currently supports the following PHP versions:\n\n- [PHP 7.4](https://www.php.net/releases/#7.4.0) (has reached its end of life on November 28, 2022)\n- [PHP 8.0](https://www.php.net/releases/#8.0.0) (has reached its end of life on November 26, 2023)\n- [PHP 8.1](https://www.php.net/releases/#8.1.0) (has reached its end of life on December 31, 2025)\n- [PHP 8.2](https://www.php.net/releases/#8.2.0)\n- [PHP 8.3](https://www.php.net/releases/#8.3.0)\n- [PHP 8.4](https://www.php.net/releases/#8.4.0)\n- [PHP 8.5](https://www.php.net/releases/#8.5.0)\n\nThe maintainers of this project add support for a PHP version following its initial release and _may_ drop support for a PHP version when it has reached its [end of life](https://www.php.net/supported-versions.php).\n\n## Security Policy\n\nThis project has a [security policy](.github/SECURITY.md).\n\n## License\n\nThis project uses the [MIT license](LICENSE.md).\n\n## Social\n\nFollow [@localheinz](https://twitter.com/intent/follow?screen_name=localheinz) and [@ergebnis](https://twitter.com/intent/follow?screen_name=ergebnis) on Twitter.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergebnis%2Fcomposer-normalize","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fergebnis%2Fcomposer-normalize","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fergebnis%2Fcomposer-normalize/lists"}