diff --git a/.gitattributes b/.gitattributes
index a119c9c..86e122e 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,11 +1,35 @@
+# Set the default behavior, in case people don't have core.autocrlf set.
+* text eol=lf
+
+# These files are binary and should be left untouched
+# (binary is a macro for -text -diff)
+*.png binary
+*.jpg binary
+*.jpeg binary
+*.gif binary
+*.ico binary
+*.webp binary
+*.bmp binary
+*.ttf binary
+*.blp binary
+*.db2 binary
+
# Ignoring files for distribution archieves
+.github/ export-ignore
+etc/ci/ export-ignore
+etc/dev-app/ export-ignore
+etc/qa/ export-ignore
examples/ export-ignore
tests/ export-ignore
-.dunitconfig export-ignore
-.travis.yml export-ignore
-.gitignore export-ignore
+var/ export-ignore
+.devcontainer.json export-ignore
+.editorconfig export-ignore
.gitattributes export-ignore
-.scrutinizer.yml export-ignore
-.styleci.yml export-ignore
-appveyor.yml export-ignore
-phpunit.xml.dist export-ignore
+.gitignore export-ignore
+CONTRIBUTING.md export-ignore
+composer.lock export-ignore
+Makefile export-ignore
+README.md export-ignore
+
+# Diffing
+*.php diff=php
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index c4b1374..0000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-version: 2
-updates:
- - package-ecosystem: "composer"
- directory: "/"
- schedule:
- interval: "daily"
- labels:
- - "Dependencies 📦"
- - "PHP 🐘"
- versioning-strategy: "widen"
- open-pull-requests-limit: 1
diff --git a/.github/renovate.json b/.github/renovate.json
new file mode 100644
index 0000000..1c478c4
--- /dev/null
+++ b/.github/renovate.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://docs.renovatebot.com/renovate-schema.json",
+ "extends": [
+ "github>WyriHaximus/renovate-config:php-package"
+ ],
+ "constraints": {
+ "php": "8.4.x",
+ "composer": "2.x"
+ }
+}
diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml
new file mode 100644
index 0000000..cd15956
--- /dev/null
+++ b/.github/workflows/ci.yaml
@@ -0,0 +1,17 @@
+name: Continuous Integration
+on:
+ push:
+ branches:
+ - 'main'
+ - 'master'
+ - 'refs/heads/v[0-9]+.[0-9]+.[0-9]+'
+ pull_request:
+## This workflow needs the `pull-request` permissions to work for the package diffing
+## Refs: https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#permissions
+permissions:
+ pull-requests: write
+ contents: read
+jobs:
+ ci:
+ name: Continuous Integration
+ uses: WyriHaximus/github-workflows/.github/workflows/package.yaml@main
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index e87bc9e..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,96 +0,0 @@
-name: Continuous Integration
-on:
- push:
- pull_request:
-jobs:
- supported-versions-matrix:
- name: Supported Versions Matrix
- runs-on: ubuntu-latest
- outputs:
- version: ${{ steps.supported-versions-matrix.outputs.version }}
- steps:
- - uses: actions/checkout@v2
- - id: supported-versions-matrix
- uses: WyriHaximus/github-action-composer-php-versions-in-range@v1
- generate-checks-strategy:
- name: Generate Checks
- runs-on: ubuntu-latest
- outputs:
- check: ${{ steps.generate-checks-strategy.outputs.check }}
- steps:
- - uses: actions/checkout@v1
- - id: generate-checks-strategy
- name: Generate check
- run: |
- printf "Checks found: %s\r\n" $(make task-list-ci)
- printf "::set-output name=check::%s" $(make task-list-ci)
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Lint Code Base
- uses: docker://github/super-linter:v2.2.0
- composer-install:
- strategy:
- fail-fast: false
- matrix:
- php: ${{ fromJson(needs.supported-versions-matrix.outputs.version) }}
- composer: [lowest, current, highest]
- needs:
- - lint
- - supported-versions-matrix
- runs-on: ubuntu-latest
- container:
- image: wyrihaximusnet/php:${{ matrix.php }}-nts-buster-dev-root
- steps:
- - uses: actions/checkout@v2
- - name: Cache composer packages
- uses: actions/cache@v1
- with:
- path: ./vendor/
- key: ${{ matrix.composer }}-${{ matrix.php }}-${{ hashFiles('**/composer.lock') }}
- - name: Install Dependencies
- run: composer update --prefer-lowest --no-progress --ansi --no-interaction --prefer-dist -o
- if: matrix.composer == 'lowest'
- - name: Install Dependencies
- run: composer install --ansi --no-progress --no-interaction --prefer-dist -o
- if: matrix.composer == 'current'
- - name: Install Dependencies
- run: composer update --ansi --no-progress --no-interaction --prefer-dist -o
- if: matrix.composer == 'highest'
- qa:
- strategy:
- fail-fast: false
- matrix:
- php: ${{ fromJson(needs.supported-versions-matrix.outputs.version) }}
- composer: [lowest, current, highest]
- check: ${{ fromJson(needs.generate-checks-strategy.outputs.check) }}
- needs:
- - composer-install
- - generate-checks-strategy
- - supported-versions-matrix
- runs-on: ubuntu-latest
- container:
- image: wyrihaximusnet/php:${{ matrix.php }}-nts-buster-dev-root
- steps:
- - uses: actions/checkout@v1
- - name: Cache composer packages
- uses: actions/cache@v2
- with:
- path: ./vendor/
- key: ${{ matrix.composer }}-${{ matrix.php }}-${{ hashFiles('**/composer.lock') }}
- - name: Install Dependencies
- run: (test -f vendor && true ) || composer update --prefer-lowest --no-progress --ansi --no-interaction --prefer-dist -o
- if: matrix.composer == 'lowest'
- - name: Install Dependencies
- run: (test -f vendor && true ) || composer install --ansi --no-progress --no-interaction --prefer-dist -o
- if: matrix.composer == 'current'
- - name: Install Dependencies
- run: (test -f vendor && true ) || composer update --ansi --no-progress --no-interaction --prefer-dist -o
- if: matrix.composer == 'highest'
- - name: Fetch Tags
- run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* || true
- if: matrix.check == 'backward-compatibility-check'
- - run: make ${{ matrix.check }}
- env:
- COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
- COVERALLS_RUN_LOCALLY: ${{ secrets.COVERALLS_RUN_LOCALLY }}
diff --git a/.github/workflows/craft-release.yaml b/.github/workflows/craft-release.yaml
deleted file mode 100644
index 9b14210..0000000
--- a/.github/workflows/craft-release.yaml
+++ /dev/null
@@ -1,56 +0,0 @@
-name: Create Release
-env:
- MILESTONE: ${{ github.event.milestone.title }}
-on:
- milestone:
- types:
- - closed
-jobs:
- generate-changelog:
- name: Generate Changelog
- runs-on: ubuntu-latest
- outputs:
- changelog: ${{ steps.changelog.outputs.changelog }}
- steps:
- - name: Generate changelog
- uses: WyriHaximus/github-action-jwage-changelog-generator@v1
- id: changelog
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- milestone: ${{ env.MILESTONE }}
- - name: Show changelog
- run: echo "${CHANGELOG}"
- env:
- CHANGELOG: ${{ steps.changelog.outputs.changelog }}
- create-release:
- name: Create Release
- needs:
- - generate-changelog
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- env:
- CHANGELOG: ${{ needs.generate-changelog.outputs.changelog }}
- - run: |
- echo -e "${MILESTONE_DESCRIPTION}\r\n\r\n${CHANGELOG}" > release-${{ env.MILESTONE }}-release-message.md
- cat release-${{ env.MILESTONE }}-release-message.md
- release_message=$(cat release-${{ env.MILESTONE }}-release-message.md)
- release_message="${release_message//'%'/'%25'}"
- release_message="${release_message//$'\n'/'%0A'}"
- release_message="${release_message//$'\r'/'%0D'}"
- echo "::set-output name=release_message::$release_message"
- id: releasemessage
- env:
- MILESTONE_DESCRIPTION: ${{ github.event.milestone.description }}
- CHANGELOG: ${{ needs.generate-changelog.outputs.changelog }}
- - name: Create Reference Release with Changelog
- uses: fleskesvor/create-release@feature/support-target-commitish
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- with:
- tag_name: ${{ env.MILESTONE }}
- release_name: ${{ env.MILESTONE }}
- body: ${{ steps.releasemessage.outputs.release_message }}
- draft: false
- prerelease: false
diff --git a/.github/workflows/release-management.yaml b/.github/workflows/release-management.yaml
new file mode 100644
index 0000000..b909d5c
--- /dev/null
+++ b/.github/workflows/release-management.yaml
@@ -0,0 +1,26 @@
+name: Release Management
+on:
+ pull_request:
+ types:
+ - opened
+ - labeled
+ - unlabeled
+ - synchronize
+ - reopened
+ - milestoned
+ - demilestoned
+ - ready_for_review
+ milestone:
+ types:
+ - closed
+permissions:
+ contents: write
+ issues: write
+ pull-requests: write
+jobs:
+ release-managment:
+ name: Release Management
+ uses: WyriHaximus/github-workflows/.github/workflows/package-release-management.yaml@main
+ with:
+ milestone: ${{ github.event.milestone.title }}
+ description: ${{ github.event.milestone.title }}
diff --git a/.github/workflows/set-milestone-on-pr.yaml b/.github/workflows/set-milestone-on-pr.yaml
deleted file mode 100644
index 1602b5b..0000000
--- a/.github/workflows/set-milestone-on-pr.yaml
+++ /dev/null
@@ -1,64 +0,0 @@
-name: Set Milestone
-on:
- pull_request:
- types:
- - assigned
- - opened
- - synchronize
- - reopened
- - edited
- - ready_for_review
- - review_requested
-jobs:
- set-milestone:
- if: github.event.pull_request.milestone == null
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v1
- - name: 'Get Previous tag'
- id: previoustag
- uses: "WyriHaximus/github-action-get-previous-tag@master"
- env:
- GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- - name: 'Get next minor version'
- id: semvers
- uses: "WyriHaximus/github-action-next-semvers@master"
- with:
- version: ${{ steps.previoustag.outputs.tag }}
- - name: 'Get Milestones'
- uses: "WyriHaximus/github-action-get-milestones@master"
- id: milestones
- env:
- GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- - run: printf "::set-output name=number::%s" $(printenv MILESTONES | jq --arg MILESTONE $(printenv MILESTONE) '.[] | select(.title == $MILESTONE) | .number')
- id: querymilestone
- env:
- MILESTONES: ${{ steps.milestones.outputs.milestones }}
- MILESTONE: ${{ steps.semvers.outputs.minor }}
- - name: 'Create Milestone'
- if: steps.querymilestone.outputs.number == ''
- id: createmilestone
- uses: "WyriHaximus/github-action-create-milestone@master"
- with:
- title: ${{ steps.semvers.outputs.minor }}
- env:
- GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
- - name: 'Select found or created Milestone'
- id: selectmilestone
- run: |
- if [ $(echo ${QUERY_NUMBER} | wc -c) -eq 1 ] ; then
- printf "::set-output name=number::%s" "${CREATED_NUMBER}"
- exit 0
- fi
-
- printf "::set-output name=number::%s" "${QUERY_NUMBER}"
- env:
- CREATED_NUMBER: ${{ steps.createmilestone.outputs.number }}
- QUERY_NUMBER: ${{ steps.querymilestone.outputs.number }}
- - name: 'Set Milestone'
- uses: "WyriHaximus/github-action-set-milestone@master"
- with:
- issue_number: ${{ github.event.pull_request.number }}
- milestone_number: ${{ steps.selectmilestone.outputs.number }}
- env:
- GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
diff --git a/.gitignore b/.gitignore
index ffa4330..205ae61 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,4 @@
examples/credentials.php
vendor/
+var/*
+!var/.gitkeep
diff --git a/LICENSE b/LICENSE
index 622fb4f..c07da2a 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2020 Cees-Jan Kiewiet
+Copyright (c) 2026 Cees-Jan Kiewiet
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/Makefile b/Makefile
index 5391c34..f1a0495 100644
--- a/Makefile
+++ b/Makefile
@@ -3,67 +3,445 @@ SHELL=bash
.PHONY: *
-DOCKER_CGROUP:=$(shell cat /proc/1/cgroup | grep docker | wc -l)
-COMPOSER_CACHE_DIR=$(shell composer config --global cache-dir -q || echo ${HOME}/.composer/cache)
+DOCKER_AVAILABLE=$(shell ((command -v docker >/dev/null 2>&1) && echo 0 || echo 1))
+CONTAINER_REGISTRY_REPO="ghcr.io/wyrihaximusnet/php"
+SLIM_DOCKER_IMAGE="-slim"
+NTS_OR_ZTS_DOCKER_IMAGE="nts"
+OTEL_PHP_FIBERS_ENABLED=true
+NEEDS_DOCKER_SOCKET=FALSE
+PHP_VERSION="8.4"
+CONTAINER_NAME=$(shell echo "${CONTAINER_REGISTRY_REPO}:${PHP_VERSION}-${NTS_OR_ZTS_DOCKER_IMAGE}-alpine${SLIM_DOCKER_IMAGE}-dev")
+CONTAINER_NAME_INTERACTIVE_SHELL=$(shell echo "${CONTAINER_REGISTRY_REPO}:${PHP_VERSION}-zts-alpine-dev")
+COMPOSER_CACHE_DIR=$(shell (command -v composer >/dev/null 2>&1) && composer config --global cache-dir -q 2>/dev/null || echo ${HOME}/.composer-php/cache)
+COMPOSER_CONTAINER_CACHE_DIR=$(shell ((command -v docker >/dev/null 2>&1) && docker run --rm -it ${CONTAINER_NAME} composer config --global cache-dir -q) || echo ${HOME}/.composer-php/cache)
-ifneq ("$(wildcard /.dockerenv)","")
+ifneq ("$(wildcard /.you-are-in-a-wyrihaximus.net-php-docker-image)","")
IN_DOCKER=TRUE
-else ifneq ("$(DOCKER_CGROUP)","0")
- IN_DOCKER=TRUE
else
- IN_DOCKER=FALSe
+ IN_DOCKER=FALSE
endif
ifeq ("$(IN_DOCKER)","TRUE")
- DOCKER_RUN=
+ DOCKER_RUN:=
+ DOCKER_RUN_WITH_SOCKET:=
+ DOCKER_SHELL:=
+ DOCKER_INTERACTIVE_SHELL:=
else
- DOCKER_RUN=docker run --rm -it \
- -v "`pwd`:`pwd`" \
- -v "${COMPOSER_CACHE_DIR}:/home/app/.composer/cache" \
- -w "`pwd`" \
- "wyrihaximusnet/php:7.4-nts-alpine3.12-dev"
+ ifeq ($(DOCKER_AVAILABLE),0)
+ DOCKER_COMMON_OPS:=-v "`pwd`:`pwd`" -w "`pwd`" -v "${COMPOSER_CACHE_DIR}:${COMPOSER_CONTAINER_CACHE_DIR}" -e OTEL_PHP_FIBERS_ENABLED="${OTEL_PHP_FIBERS_ENABLED}" --ulimit nofile=1000000
+ ifeq ("$(NEEDS_DOCKER_SOCKET)","TRUE")
+ ifneq ("$(wildcard /var/run/docker.sock)","")
+ DOCKER_SOCKET_OPS:=-v "/var/run/docker.sock:/var/run/docker.sock"
+ DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=-root
+ else
+ DOCKER_SOCKET_OPS:=
+ DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=
+ endif
+ else
+ DOCKER_SOCKET_OPS:=
+ DOCKER_SOCKET_CONTAINER_NAME_SUFFIX:=
+ endif
+ DOCKER_RUN:=docker run --rm -i ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
+ DOCKER_RUN_WITH_SOCKET:=docker run --rm -i ${DOCKER_COMMON_OPS} ${DOCKER_SOCKET_OPS} "${CONTAINER_NAME}${DOCKER_SOCKET_CONTAINER_NAME_SUFFIX}"
+ DOCKER_SHELL:=docker run --rm -it ${DOCKER_COMMON_OPS} "${CONTAINER_NAME}"
+ DOCKER_INTERACTIVE_SHELL:=docker run --rm -it ${DOCKER_COMMON_OPS} "${CONTAINER_NAME_INTERACTIVE_SHELL}"
+ else
+ DOCKER_RUN:=
+ DOCKER_RUN_WITH_SOCKET:=
+ DOCKER_SHELL:=
+ DOCKER_INTERACTIVE_SHELL:=
+ endif
endif
-all: ## Runs everything ###
- @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -v "###" | awk 'BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | xargs --open-tty $(MAKE)
+ifneq (,$(findstring icrosoft,$(shell cat /proc/version)))
+ THREADS=1
+else
+ THREADS=$(shell nproc)
+endif
+
+## Run everything extra point
+all: ## Runs everything ####
+ $(DOCKER_RUN_WITH_SOCKET) make all-raw
+all-raw: ## The real runs everything, but due to sponge it has to be ran inside DOCKER_RUN ##U##
+ $(MAKE) composer-validate syntax-php rector-upgrade cs-fix cs stan unit-testing mutation-testing composer-require-checker composer-unused backward-compatibility-check ## Count: 11
+
+
+## Temporary set of migrations to get all my repos in shape
+migrations-git-enforce-gitattributes-contents: #### Enforce .gitattributes contents ##*I*##
+ ($(DOCKER_RUN) php -r 'file_put_contents(".gitattributes", base64_decode("IyBTZXQgdGhlIGRlZmF1bHQgYmVoYXZpb3IsIGluIGNhc2UgcGVvcGxlIGRvbid0IGhhdmUgY29yZS5hdXRvY3JsZiBzZXQuCiogdGV4dCBlb2w9bGYKCiMgVGhlc2UgZmlsZXMgYXJlIGJpbmFyeSBhbmQgc2hvdWxkIGJlIGxlZnQgdW50b3VjaGVkCiMgKGJpbmFyeSBpcyBhIG1hY3JvIGZvciAtdGV4dCAtZGlmZikKKi5wbmcgYmluYXJ5CiouanBnIGJpbmFyeQoqLmpwZWcgYmluYXJ5CiouZ2lmIGJpbmFyeQoqLmljbyBiaW5hcnkKKi53ZWJwIGJpbmFyeQoqLmJtcCBiaW5hcnkKKi50dGYgYmluYXJ5CiouYmxwIGJpbmFyeQoqLmRiMiBiaW5hcnkKCiMgSWdub3JpbmcgZmlsZXMgZm9yIGRpc3RyaWJ1dGlvbiBhcmNoaWV2ZXMKLmdpdGh1Yi8gZXhwb3J0LWlnbm9yZQpldGMvY2kvIGV4cG9ydC1pZ25vcmUKZXRjL2Rldi1hcHAvIGV4cG9ydC1pZ25vcmUKZXRjL3FhLyBleHBvcnQtaWdub3JlCmV4YW1wbGVzLyBleHBvcnQtaWdub3JlCnRlc3RzLyBleHBvcnQtaWdub3JlCnZhci8gZXhwb3J0LWlnbm9yZQouZGV2Y29udGFpbmVyLmpzb24gZXhwb3J0LWlnbm9yZQouZWRpdG9yY29uZmlnIGV4cG9ydC1pZ25vcmUKLmdpdGF0dHJpYnV0ZXMgZXhwb3J0LWlnbm9yZQouZ2l0aWdub3JlIGV4cG9ydC1pZ25vcmUKQ09OVFJJQlVUSU5HLm1kIGV4cG9ydC1pZ25vcmUKY29tcG9zZXIubG9jayBleHBvcnQtaWdub3JlCk1ha2VmaWxlIGV4cG9ydC1pZ25vcmUKUkVBRE1FLm1kIGV4cG9ydC1pZ25vcmUKCiMgRGlmZmluZwoqLnBocCBkaWZmPXBocAo="));' || true)
+
+migrations-git-make-sure-gitignore-exists: #### Make sure .gitignore exists ##*I*##
+ ($(DOCKER_RUN) touch .gitignore || true)
+
+migrations-git-make-sure-gitignore-ignores-var: #### Make sure .gitignore ignores var/* ##*I*##
+ ($(DOCKER_RUN) php -r '$$gitignoreFile = ".gitignore"; if (!file_exists($$gitignoreFile)) {exit;} $$txt = file_get_contents($$gitignoreFile); if (!is_string($$txt)) {exit;} if (strpos($$txt, "var/*") !== false) {exit;} file_put_contents($$gitignoreFile, "var/*\n", FILE_APPEND);' || true)
+
+migrations-git-make-sure-gitignore-excludes-var-gitkeep: #### Make sure .gitignore excludes var/.gitkeep ##*I*##
+ ($(DOCKER_RUN) php -r '$$gitignoreFile = ".gitignore"; if (!file_exists($$gitignoreFile)) {exit;} $$txt = file_get_contents($$gitignoreFile); if (!is_string($$txt)) {exit;} if (strpos($$txt, "!var/.gitkeep") !== false) {exit;} file_put_contents($$gitignoreFile, "!var/.gitkeep\n", FILE_APPEND);' || true)
+
+migrations-docs-update-readme-copyright-c-year-to-current: #### Update readme copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$readmeFile = "README.md"; $$copyRight = "Copyright (c) "; $$currentYear = date("Y"); if (!file_exists($$readmeFile)) {exit;} $$readmeContents = file_get_contents($$readmeFile); foreach (range(2000, 2100) as $$year) { $$readmeContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$readmeContents); } file_put_contents($$readmeFile, $$readmeContents); ' || true)
+
+migrations-docs-update-readme-copyright-year-to-current: #### Update readme copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$readmeFile = "README.md"; $$copyRight = "Copyright "; $$currentYear = date("Y"); if (!file_exists($$readmeFile)) {exit;} $$readmeContents = file_get_contents($$readmeFile); foreach (range(2000, 2100) as $$year) { $$readmeContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$readmeContents); } file_put_contents($$readmeFile, $$readmeContents); ' || true)
+
+migrations-docs-update-etc-readme-template-copyright-c-year-to-current: #### Update readme template in etc/ copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$readmeFile = "etc/README.md.twig"; $$copyRight = "Copyright (c) "; $$currentYear = date("Y"); if (!file_exists($$readmeFile)) {exit;} $$readmeContents = file_get_contents($$readmeFile); foreach (range(2000, 2100) as $$year) { $$readmeContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$readmeContents); } file_put_contents($$readmeFile, $$readmeContents); ' || true)
+
+migrations-docs-update-etc-readme-template-copyright-year-to-current: #### Update readme template in etc/ copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$readmeFile = "etc/README.md.twig"; $$copyRight = "Copyright "; $$currentYear = date("Y"); if (!file_exists($$readmeFile)) {exit;} $$readmeContents = file_get_contents($$readmeFile); foreach (range(2000, 2100) as $$year) { $$readmeContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$readmeContents); } file_put_contents($$readmeFile, $$readmeContents); ' || true)
+
+migrations-docs-create-license-when-it-doesnt-exists: #### Create license when it doesn't exists ##*I*##
+ ($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; if (file_exists($$licenseFile)) {exit;} file_put_contents($$licenseFile, base64_decode("VGhlIE1JVCBMaWNlbnNlIChNSVQpCgpDb3B5cmlnaHQgKGMpIDIwMDEgQ2Vlcy1KYW4gS2lld2lldAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQpTT0ZUV0FSRS4K"));' || true)
+
+migrations-docs-update-license-copyright-c-year-to-current: #### Update license copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; $$copyRight = "Copyright (c) "; $$currentYear = date("Y"); if (!file_exists($$licenseFile)) {exit;} $$licenseContents = file_get_contents($$licenseFile); foreach (range(2000, 2100) as $$year) { $$licenseContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$licenseContents); } file_put_contents($$licenseFile, $$licenseContents); ' || true)
+
+migrations-docs-update-license-copyright-year-to-current: #### Update license copyright year to current ##*I*##
+ ($(DOCKER_RUN) php -r '$$licenseFile = "LICENSE"; $$copyRight = "Copyright "; $$currentYear = date("Y"); if (!file_exists($$licenseFile)) {exit;} $$licenseContents = file_get_contents($$licenseFile); foreach (range(2000, 2100) as $$year) { $$licenseContents = str_replace($$copyRight . $$year, $$copyRight . $$currentYear, $$licenseContents); } file_put_contents($$licenseFile, $$licenseContents); ' || true)
+
+migrations-php-make-sure-var-exists: #### Make sure var/ exists ##*I*##
+ ($(DOCKER_RUN) mkdir var || true)
+
+migrations-php-make-sure-var-gitkeep-exists: #### Make sure var/.gitkeep exists ##*I*##
+ ($(DOCKER_RUN) touch var/.gitkeep || true)
+
+migrations-php-make-sure-etc-exists: #### Make sure etc/ exists ##*I*##
+ ($(DOCKER_RUN) mkdir etc || true)
+
+migrations-php-make-sure-etc-ci-exists: #### Make sure etc/ci/ exists ##*I*##
+ ($(DOCKER_RUN) mkdir etc/ci || true)
+
+migrations-php-make-sure-etc-qa-exists: #### Make sure etc/qa/ exists ##*I*##
+ ($(DOCKER_RUN) mkdir etc/qa || true)
+
+migrations-php-move-psalm-xml-config-to-etc: #### Move psalm.xml to etc/qa/psalm.xml ##*I*##
+ ($(DOCKER_RUN) mv psalm.xml etc/qa/psalm.xml || true)
+
+migrations-php-remove-psalm-xml-config: #### Make sure we remove etc/qa/psalm.xml ##*I*##
+ ($(DOCKER_RUN) rm etc/qa/psalm.xml || true)
+
+migrations-php-remove-old-phpunit-xml-dist-config: #### Make sure we remove phpunit.xml.dist ##*I*##
+ ($(DOCKER_RUN) rm phpunit.xml.dist || true)
+
+migrations-php-remove-old-phpunit-xml-config: #### Make sure we remove phpunit.xml ##*I*##
+ ($(DOCKER_RUN) rm phpunit.xml || true)
+
+migrations-php-ensure-etc-ci-markdown-link-checker-json-exists: #### Make sure we have etc/ci/markdown-link-checker.json ##*I*##
+ ($(DOCKER_RUN) php -r '$$markdownLinkCheckerFile = "etc/ci/markdown-link-checker.json"; $$json = json_decode("{\"httpHeaders\": [{\"urls\": [\"https://docs.github.com/\"],\"headers\": {\"Accept-Encoding\": \"zstd, br, gzip, deflate\"}}]}"); if (file_exists($$markdownLinkCheckerFile)) {exit;} file_put_contents($$markdownLinkCheckerFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-move-infection-config-to-etc: #### Move infection.json.dist to etc/qa/infection.json5 ##*I*##
+ ($(DOCKER_RUN) mv infection.json.dist etc/qa/infection.json5 || true)
+
+migrations-php-infection-create-config-if-not-exists: #### Create Infection config file if it doesn't exists at etc/qa/infection.json5 ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; $$infectionConfig = base64_decode("ewogICAgInRpbWVvdXQiOiAxMjAsCiAgICAic291cmNlIjogewogICAgICAgICJkaXJlY3RvcmllcyI6IFsKICAgICAgICAgICAgInNyYyIKICAgICAgICBdCiAgICB9LAogICAgImxvZ3MiOiB7CiAgICAgICAgInRleHQiOiAiLi4vLi4vdmFyL2luZmVjdGlvbi5sb2ciLAogICAgICAgICJzdW1tYXJ5IjogIi4uLy4uL3Zhci9pbmZlY3Rpb24tc3VtbWFyeS5sb2ciLAogICAgICAgICJqc29uIjogIi4uLy4uL3Zhci9pbmZlY3Rpb24uanNvbiIsCiAgICAgICAgInBlck11dGF0b3IiOiAiLi4vLi4vdmFyL2luZmVjdGlvbi1wZXItbXV0YXRvci5tZCIsCiAgICAgICAgImdpdGh1YiI6IHRydWUKICAgIH0sCiAgICAibWluTXNpIjogMTAwLAogICAgIm1pbkNvdmVyZWRNc2kiOiAxMDAsCiAgICAiaWdub3JlTXNpV2l0aE5vTXV0YXRpb25zIjogdHJ1ZSwKICAgICJtdXRhdG9ycyI6IHsKICAgICAgICAiQGRlZmF1bHQiOiB0cnVlCiAgICB9Cn0K"); if (file_exists($$infectionFile)) {exit;} file_put_contents($$infectionFile, $$infectionConfig);' || true)
+
+migrations-php-remove-phpunit-config-dir-from-infection: #### Drop XXX from etc/qa/infection.json5 ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("phpUnit", $$json)) {exit;} unset($$json["phpUnit"]); file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-fix-logs-relative-paths-for-infection: #### Fix logs paths in etc/qa/infection.json5 ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) {exit;} foreach ($$json["logs"] as $$logsKey => $$logsPath) { if (is_string($$json["logs"][$$logsKey]) && str_starts_with($$json["logs"][$$logsKey], "./var/infection")) { $$json["logs"][$$logsKey] = str_replace("./var/infection", "../../var/infection", $$json["logs"][$$logsKey]); } } file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-infection-ensure-log-text-has-the-correct-path: #### Ensure infection's log.text has config directive has the correct path ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) { $$json["logs"] = []; } $$json["logs"]["text"] = "../../var/infection.log"; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-infection-ensure-log-summary-has-the-correct-path: #### Ensure infection's log.summary has config directive has the correct path ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) { $$json["logs"] = []; } $$json["logs"]["summary"] = "../../var/infection-summary.log"; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-infection-ensure-log-json-has-the-correct-path: #### Ensure infection's log.json has config directive has the correct path ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) { $$json["logs"] = []; } $$json["logs"]["json"] = "../../var/infection.json"; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-infection-ensure-log-per-mutator-has-the-correct-path: #### Ensure infection's log.perMutator has config directive has the correct path ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) { $$json["logs"] = []; } $$json["logs"]["perMutator"] = "../../var/infection-per-mutator.md"; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-add-github-true-to-for-infection: #### Ensure we configure infection to emit logs to GitHub in etc/qa/infection.json5 ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("logs", $$json)) {exit;} if (array_key_exists("github", $$json["logs"])) {exit;} $$json["logs"]["github"] = true; file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-make-paths-compatible-with-infection-0-32: #### We update path to be relative to etc/qa/infection.json5 as of 0.32 ##*I*##
+ ($(DOCKER_RUN) php -r '$$infectionFile = "etc/qa/infection.json5"; if (!file_exists($$infectionFile)) {exit;} $$json = json_decode(file_get_contents($$infectionFile), true); if (!is_array($$json)) {exit;} if (!array_key_exists("source", $$json)) {exit;} if (!array_key_exists("directories", $$json["source"])) {exit;} foreach ($$json["source"]["directories"] as $$key => $$value) { if (!str_starts_with($$value, "../../")) {$$json["source"]["directories"][$$key] = "../../" . $$value;} } file_put_contents($$infectionFile, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migrations-php-set-phpunit-ensure-config-file-exists: #### Make sure we have a PHPUnit config file at etc/qa/phpunit.xml ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (file_exists($$phpUnitConfigFIle)) {exit;} file_put_contents($$phpUnitConfigFIle, base64_decode("PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQKICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICBib290c3RyYXA9Ii4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAiCiAgICBjb2xvcnM9InRydWUiCiAgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iLi4vLi4vdmVuZG9yL3BocHVuaXQvcGhwdW5pdC9waHB1bml0LnhzZCIKICAgIGNhY2hlRGlyZWN0b3J5PSIuLi8uLi92YXIvcGhwdW5pdC9jYWNoZSIKICAgIGRpc3BsYXlEZXRhaWxzT25UZXN0c1RoYXRUcmlnZ2VyRGVwcmVjYXRpb25zPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblRlc3RzVGhhdFRyaWdnZXJFcnJvcnM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlck5vdGljZXM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlcldhcm5pbmdzPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblBocHVuaXREZXByZWNhdGlvbnM9InRydWUiCj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li4vLi4vdGVzdHMvPC9kaXJlY3Rvcnk+CiAgICAgICAgPC90ZXN0c3VpdGU+CiAgICA8L3Rlc3RzdWl0ZXM+CiAgICA8c291cmNlPgogICAgICAgIDxpbmNsdWRlPgogICAgICAgICAgICA8ZGlyZWN0b3J5IHN1ZmZpeD0iLnBocCI+Li4vLi4vc3JjLzwvZGlyZWN0b3J5PgogICAgICAgIDwvaW5jbHVkZT4KICAgIDwvc291cmNlPgogICAgPGV4dGVuc2lvbnM+CiAgICAgICAgPGJvb3RzdHJhcCBjbGFzcz0iRXJnZWJuaXNcUEhQVW5pdFxTbG93VGVzdERldGVjdG9yXEV4dGVuc2lvbiIvPgogICAgPC9leHRlbnNpb25zPgo8L3BocHVuaXQ+Cg=="));' || true)
+
+migrations-php-set-phpunit-xsd-path-to-local: #### Ensure that the PHPUnit XDS referred in etc/qa/phpunit.xml points to vendor/phpunit/phpunit/phpunit.xsd so we don't go over the network ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (!file_exists($$phpUnitConfigFIle)) {exit;} $$xml = file_get_contents($$phpUnitConfigFIle); if (!is_string($$xml)) {exit;} for ($$major = 0; $$major < 23; $$major++) { for ($$minor = 0; $$minor < 23; $$minor++) { $$xml = str_replace("https://schema.phpunit.de/" . $$major . "." . $$minor . "/phpunit.xsd", "../../vendor/phpunit/phpunit/phpunit.xsd", $$xml); } } file_put_contents($$phpUnitConfigFIle, $$xml);' || true)
+
+migrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit: #### Make sure we see all the warnings, deprecations, etc etc that will make PHPunit do a non-happy exit ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpUnitConfigFIle = "etc/qa/phpunit.xml"; if (!file_exists($$phpUnitConfigFIle)) {exit;} $$xml = file_get_contents($$phpUnitConfigFIle); if (!is_string($$xml)) {exit;} $$xml = str_replace(base64_decode("PHBocHVuaXQgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgYm9vdHN0cmFwPSIuLi8uLi92ZW5kb3IvYXV0b2xvYWQucGhwIiBjb2xvcnM9InRydWUiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSIuLi8uLi92ZW5kb3IvcGhwdW5pdC9waHB1bml0L3BocHVuaXQueHNkIiBjYWNoZURpcmVjdG9yeT0iLi4vLi4vdmFyL3BocHVuaXQvY2FjaGUiPg=="), base64_decode("PHBocHVuaXQKICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICBib290c3RyYXA9Ii4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAiCiAgICBjb2xvcnM9InRydWUiCiAgICB4c2k6bm9OYW1lc3BhY2VTY2hlbWFMb2NhdGlvbj0iLi4vLi4vdmVuZG9yL3BocHVuaXQvcGhwdW5pdC9waHB1bml0LnhzZCIKICAgIGNhY2hlRGlyZWN0b3J5PSIuLi8uLi92YXIvcGhwdW5pdC9jYWNoZSIKICAgIGRpc3BsYXlEZXRhaWxzT25UZXN0c1RoYXRUcmlnZ2VyRGVwcmVjYXRpb25zPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblRlc3RzVGhhdFRyaWdnZXJFcnJvcnM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlck5vdGljZXM9InRydWUiCiAgICBkaXNwbGF5RGV0YWlsc09uVGVzdHNUaGF0VHJpZ2dlcldhcm5pbmdzPSJ0cnVlIgogICAgZGlzcGxheURldGFpbHNPblBocHVuaXREZXByZWNhdGlvbnM9InRydWUiCj4="), $$xml); file_put_contents($$phpUnitConfigFIle, $$xml);' || true)
+
+migrations-php-move-phpstan: #### Move phpstan.neon to etc/qa/phpstan.neon ##*I*##
+ ($(DOCKER_RUN) mv phpstan.neon etc/qa/phpstan.neon || true)
+
+migrations-php-set-phpstan-ensure-config-file-exists: #### Make sure we have a PHPStan config file at etc/qa/phpstan.neon ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (file_exists($$phpStanConfigFIle)) {exit;} file_put_contents($$phpStanConfigFIle, "#parameters:");' || true)
+
+migrations-php-set-phpstan-uncomment-parameters: #### Ensure PHPStan config as parameters not commented out in etc/qa/phpstan.neon ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (!str_starts_with($$neon, "#parameters:")) {exit;} $$neon = str_replace("#parameters:", "parameters:", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file: #### Add parameters to PHPStan config file at etc/qa/phpstan.neon if it's not present ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, "parameters:") !== false) {exit;} file_put_contents($$phpStanConfigFIle, "parameters:", FILE_APPEND);' || true)
+
+migrations-php-set-phpstan-paths-in-config: #### Ensure PHPStan config has the etc, src, and (optionally) tests paths set in etc/qa/phpstan.neon ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; $$pathsString = "\n\tpaths:\n\t\t- ../../etc\n\t\t- ../../src\n\t\t- ../../tests"; $$pathsStringWithoutTests = "\n\tpaths:\n\t\t- ../../etc\n\t\t- ../../src"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, $$pathsString) !== false || strpos($$neon, $$pathsStringWithoutTests) !== false) {exit;} $$neon = str_replace("parameters:", "parameters:" . $$pathsString, $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-level-max-in-config: #### Ensure PHPStan config has level set to max in etc/qa/phpstan.neon ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; $$levelString = "\n\tlevel: max"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} if (strpos($$neon, $$levelString) !== false) {exit;} $$neon = str_replace("parameters:", "parameters:" . $$levelString, $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended: #### Ensure PHPStan config uses ergebnis.noExtends.classesAllowedToBeExtended not ergebnis.classesAllowedToBeExtended ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\tergebnis:\n\t\tclassesAllowedToBeExtended:\n", "\tergebnis:\n\t\tnoExtends:\n\t\t\tclassesAllowedToBeExtended:\n", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType: #### Ensure PHPStan config doesn't contain checkGenericClassInNonGenericObjectType as it's no longer a valid config option ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\tcheckGenericClassInNonGenericObjectType: false\n", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list: #### PHPStan add ../../ to anything in a list that starts with vendor ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("- vendor", "- ../../vendor", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-drop-include-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for wyrihaximus/async-utilities/rules.neon as it's now an extension ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\nincludes:\n\t- ../../vendor/wyrihaximus/test-utilities/rules.neon\n", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-phpstan-drop-include-async-test-utilities-rules: #### Ensure PHPStan config doesn't contain include for wyrihaximus/async-test-utilities/rules.neon as it's now an extension ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpStanConfigFIle = "etc/qa/phpstan.neon"; if (!file_exists($$phpStanConfigFIle)) {exit;} $$neon = file_get_contents($$phpStanConfigFIle); if (!is_string($$neon)) {exit;} $$neon = str_replace("\nincludes:\n\t- ../../vendor/wyrihaximus/async-test-utilities/rules.neon", "", $$neon); file_put_contents($$phpStanConfigFIle, $$neon);' || true)
+
+migrations-php-set-rector-create-config-if-not-exists: #### Create Rector config file if it doesn't exists at etc/qa/rector.php ##*I*##
+ ($(DOCKER_RUN) php -r '$$rectorConfigFile = "etc/qa/rector.php"; $$defaultRectorConfig = "", "", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-cache-is-correct-relatively: #### Make sure PHPCS cache path is has ../../var/.phpcs.cache and not .phpcs.cache ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("", "", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc: #### Make sure PHPCS has ../../ prefixing etc/ to ensure correct relative path ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("etc", "../../etc/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-etc-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on etc ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../etc/", "../../etc", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
-syntax-php: ## Lint PHP syntax
+migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src: #### Make sure PHPCS has ../../ prefixing src/ to ensure correct relative path ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("src", "../../src/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-src-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on src ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../src/", "../../src", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests: #### Make sure PHPCS has ../../ prefixing tests/ to ensure correct relative path ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("tests", "../../tests/", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-tests-has-no-trailing-slash: #### Make sure PHPCS has no tailing / on tests ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} $$xml = str_replace("../../tests/", "../../tests", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-phpcs-make-sure-etc-is-ran-through: #### Make sure PHPCS runs through etc ##*I*##
+ ($(DOCKER_RUN) php -r '$$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} if (strpos($$xml, "../../etc") !== false) {exit;} $$xml = str_replace("../../src", "../../etc\n ../../src", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-phpcs-include-examples-directory-when-present: #### Make sure PHPCS runs through examples when it exists ##*I*##
+ ($(DOCKER_RUN) php -r 'if (!file_exists("examples/")) {exit;} $$phpcsConfigFile = "etc/qa/phpcs.xml"; if (!file_exists($$phpcsConfigFile)) {exit;} $$xml = file_get_contents($$phpcsConfigFile); if (!is_string($$xml)) {exit;} if (strpos($$xml, "../../examples") !== false) {exit;} $$xml = str_replace("../../etc", "../../etc\n ../../examples", $$xml); file_put_contents($$phpcsConfigFile, $$xml);' || true)
+
+migrations-php-move-composer-require-checker: #### Move composer-require-checker.json to etc/qa/composer-require-checker.json ##*I*##
+ ($(DOCKER_RUN) mv composer-require-checker.json etc/qa/composer-require-checker.json || true)
+
+migrations-php-composer-require-checker-create-config-if-not-exists: #### Create Composer Require Checker config file if it doesn't exists at etc/qa/composer-require-checker.json ##*I*##
+ ($(DOCKER_RUN) php -r '$$composerRequireCheckerConfigFile = "etc/qa/composer-require-checker.json"; $$composerRequireCheckerConfig = base64_decode("ewogICJzeW1ib2wtd2hpdGVsaXN0IiA6IFsKICAgICJudWxsIiwgInRydWUiLCAiZmFsc2UiLAogICAgInN0YXRpYyIsICJzZWxmIiwgInBhcmVudCIsCiAgICAiYXJyYXkiLCAic3RyaW5nIiwgImludCIsICJmbG9hdCIsICJib29sIiwgIml0ZXJhYmxlIiwgImNhbGxhYmxlIiwgInZvaWQiLCAib2JqZWN0IgogIF0sCiAgInBocC1jb3JlLWV4dGVuc2lvbnMiIDogWwogICAgIkNvcmUiLAogICAgImRhdGUiLAogICAgInBjcmUiLAogICAgIlBoYXIiLAogICAgIlJlZmxlY3Rpb24iLAogICAgIlNQTCIsCiAgICAic3RhbmRhcmQiCiAgXSwKICAic2Nhbi1maWxlcyIgOiBbXQp9Cg=="); if (file_exists($$composerRequireCheckerConfigFile)) {exit;} file_put_contents($$composerRequireCheckerConfigFile, $$composerRequireCheckerConfig);' || true)
+
+migrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line: #### Remove all lines that contains @phpstan-ignore-next-line ##*I*##
+ ($(DOCKER_RUN) php -r '$$possibleDirectories = ["src", "tests", "etc", "examples"]; foreach ($$possibleDirectories as $$possibleDirectory) { if (!file_exists($$possibleDirectory)) {continue;} $$i = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($$possibleDirectory)); $$i->rewind(); while ($$i->valid()) { if (!is_file($$i->key()) || (is_file($$i->key()) && !str_ends_with($$i->key(), ".php"))) { $$i->next(); continue; } $$fileContents = explode("\n", file_get_contents($$i->key())); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "@phpstan-ignore-next-line")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$i->key(), implode("\n", $$fileContents)); $$i->next(); } }' || true)
+
+migrations-inline-code-phpstan-remove-rest-of-line-phpstan-ignore-line: #### Remove rest of line for all lines that contain @phpstan-ignore-line ##*I*##
+ ($(DOCKER_RUN) php -r '$$possibleDirectories = ["src", "tests", "etc", "examples"]; foreach ($$possibleDirectories as $$possibleDirectory) { if (!file_exists($$possibleDirectory)) {continue;} $$i = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($$possibleDirectory)); $$i->rewind(); while ($$i->valid()) { if (!is_file($$i->key()) || (is_file($$i->key()) && !str_ends_with($$i->key(), ".php"))) { $$i->next(); continue; } $$fileContents = explode("\n", file_get_contents($$i->key())); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "/** @phpstan-ignore-line")) { [$$fileContents[$$lineNumber]] = explode("/** @phpstan-ignore-line", $$lineContent); } } file_put_contents($$i->key(), implode("\n", $$fileContents)); $$i->next(); } }' || true)
+
+migrations-inline-code-psalm-remove-line-psalm-suppress: #### Remove all lines that contain @psalm-suppress ##*I*##
+ ($(DOCKER_RUN) php -r '$$possibleDirectories = ["src", "tests", "etc", "examples"]; foreach ($$possibleDirectories as $$possibleDirectory) { if (!file_exists($$possibleDirectory)) {continue;} $$i = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($$possibleDirectory)); $$i->rewind(); while ($$i->valid()) { if (!is_file($$i->key()) || (is_file($$i->key()) && !str_ends_with($$i->key(), ".php"))) { $$i->next(); continue; } $$fileContents = explode("\n", file_get_contents($$i->key())); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "@psalm-suppress")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$i->key(), implode("\n", $$fileContents)); $$i->next(); } }' || true)
+
+migrations-inline-code-remove-line-internal: #### Remove all lines that contain @internal ##*I*##
+ ($(DOCKER_RUN) php -r '$$possibleDirectories = ["src", "tests", "etc", "examples"]; foreach ($$possibleDirectories as $$possibleDirectory) { if (!file_exists($$possibleDirectory)) {continue;} $$i = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($$possibleDirectory)); $$i->rewind(); while ($$i->valid()) { if (!is_file($$i->key()) || (is_file($$i->key()) && !str_ends_with($$i->key(), ".php"))) { $$i->next(); continue; } $$fileContents = explode("\n", file_get_contents($$i->key())); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "@internal")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$i->key(), implode("\n", $$fileContents)); $$i->next(); } }' || true)
+
+migrations-supported-features-php-ensure-we-only-cs-check-and-fix-tests-if-unit-tests-is-enabled: #### Ensure we only cs check/fix tests/ if unit-tests is enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} $$phpCSCongifFIle = "etc/qa/phpcs.xml"; $$fileContents = explode("\n", file_get_contents($$phpCSCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpCSCongifFIle, implode("\n", $$fileContents));' || true)
+
+migrations-supported-features-php-ensure-we-only-staticly-analyse-tests-with-phpstan-if-unit-tests-is-enabled: #### Ensure we only staticly analyse tests/ with PHPStan if unit-tests is enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} $$phpStanCongifFIle = "etc/qa/phpstan.neon"; $$fileContents = explode("\n", file_get_contents($$phpStanCongifFIle)); foreach ($$fileContents as $$lineNumber => $$lineContent) { if (str_contains($$lineContent, "- ../../tests")) { unset($$fileContents[$$lineNumber]); } } file_put_contents($$phpStanCongifFIle, implode("\n", $$fileContents));' || true)
+
+migrations-supported-features-php-ensure-no-phpunit-config-file-is-present-when-unit-tests-are-disabled: #### Ensure we remove the PHPUnit config file when unit-tests aren't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} @unlink("etc/qa/phpunit.xml");' || true)
+
+migrations-supported-features-php-ensure-no-infectionphp-config-file-is-present-when-unit-tests-are-disabled: #### Ensure we remove the InfectionPHP config file when unit-tests aren't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("unit-tests", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} @unlink("etc/qa/infection.json5");' || true)
+
+migrations-supported-features-php-ensure-no-rector-config-file-is-present-when-code-style-is-disabled: #### Ensure we remove the RectorPHP config file when code-style isn't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("code-style", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} @unlink("etc/qa/rector.php");' || true)
+
+migrations-supported-features-php-ensure-no-phpcs-config-file-is-present-when-code-style-is-disabled: #### Ensure we remove the PHPCSS config file when code-style isn't enabled ##*I*##
+ ($(DOCKER_RUN) php -r 'if (in_array("code-style", ["code-style","composer-dependency-checkers","linux","macos","static-analysis","unit-tests","windows"])) {exit;} @unlink("etc/qa/phpcs.xml");' || true)
+
+migrations-php-make-sure-github-exists: #### Make sure .github/ exists ##*I*##
+ ($(DOCKER_RUN) mkdir .github || true)
+
+migrations-github-codeowners: #### Ensure a CODEOWNERS file is present, create only if it doesn't exist yet ##*I*##
+ ($(DOCKER_RUN) php -r '$$codeOwnersFile = ".github/CODEOWNERS"; if (file_exists($$codeOwnersFile)) {exit;} file_put_contents($$codeOwnersFile, "* @WyriHaximus" . PHP_EOL);' || true)
+
+migrations-php-make-sure-github-workflows-exists: #### Make sure .github/workflows exists ##*I*##
+ ($(DOCKER_RUN) mkdir .github/workflows || true)
+
+migrations-github-actions-remove-composer-diff: #### Remove composer-diff.yaml it has been folded into centralized workflows through ci.yaml ##*I*##
+ ($(DOCKER_RUN) rm .github/workflows/composer-diff.yaml || true)
+
+migrations-github-actions-remove-markdown-check-links: #### Remove markdown-check-links.yaml it has been folded into centralized workflows through ci.yaml ##*I*##
+ ($(DOCKER_RUN) rm .github/workflows/markdown-check-links.yaml || true)
+
+migrations-github-actions-remove-markdown-craft-release: #### Remove craft-release.yaml it has been folded into centralized workflows through release-management.yaml ##*I*##
+ ($(DOCKER_RUN) rm .github/workflows/craft-release.yaml || true)
+
+migrations-github-actions-remove-set-milestone-on-pr: #### Remove set-milestone-on-pr.yaml it has been folded into centralized workflows through release-management.yaml ##*I*##
+ ($(DOCKER_RUN) rm .github/workflows/set-milestone-on-pr.yaml || true)
+
+migrations-github-actions-move-ci: #### Move .github/workflows/ci.yml to .github/workflows/ci.yaml ##*I*##
+ ($(DOCKER_RUN) mv .github/workflows/ci.yml .github/workflows/ci.yaml || true)
+
+migrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow: #### Remove CI Workflow if its the old style PHP CI Workflow ##*I*##
+ ($(DOCKER_RUN) php -r '$$ciWorkflowFile = ".github/workflows/ci.yaml"; if (!file_exists($$ciWorkflowFile)) {exit;} $$yaml = file_get_contents($$ciWorkflowFile); if (!is_string($$yaml)) {exit;} if (strpos($$yaml, "composer: [lowest, locked, highest]") !== false || strpos($$yaml, "composer: [lowest, current, highest]") !== false || strpos($$yaml, "- run: make ${{ matrix.check }}") !== false || strpos($$yaml, base64_decode("aWY6IG1hdHJpeC5jaGVjayA9PSAnYmFja3dhcmQtY29tcGF0aWJpbGl0eS1jaGVjayc=")) !== false) { unlink($$ciWorkflowFile); }' || true)
+
+migrations-github-actions-create-ci-if-not-exists: #### Create CI Workflow if it doesn't exists at .github/workflows/ci.yaml ##*I*##
+ ($(DOCKER_RUN) php -r '$$ciWorkflowFile = ".github/workflows/ci.yaml"; $$ciWorkflowContents = base64_decode("bmFtZTogQ29udGludW91cyBJbnRlZ3JhdGlvbgpvbjoKICBwdXNoOgogICAgYnJhbmNoZXM6CiAgICAgIC0gJ21haW4nCiAgICAgIC0gJ21hc3RlcicKICAgICAgLSAncmVmcy9oZWFkcy92WzAtOV0rLlswLTldKy5bMC05XSsnCiAgcHVsbF9yZXF1ZXN0OgojIyBUaGlzIHdvcmtmbG93IG5lZWRzIHRoZSBgcHVsbC1yZXF1ZXN0YCBwZXJtaXNzaW9ucyB0byB3b3JrIGZvciB0aGUgcGFja2FnZSBkaWZmaW5nCiMjIFJlZnM6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvcmVmZXJlbmNlL3dvcmtmbG93LXN5bnRheC1mb3ItZ2l0aHViLWFjdGlvbnMjcGVybWlzc2lvbnMKcGVybWlzc2lvbnM6CiAgcHVsbC1yZXF1ZXN0czogd3JpdGUKICBjb250ZW50czogcmVhZApqb2JzOgogIGNpOgogICAgbmFtZTogQ29udGludW91cyBJbnRlZ3JhdGlvbgogICAgdXNlczogV3lyaUhheGltdXMvZ2l0aHViLXdvcmtmbG93cy8uZ2l0aHViL3dvcmtmbG93cy9wYWNrYWdlLnlhbWxAbWFpbgo="); if (file_exists($$ciWorkflowFile)) {exit;} file_put_contents($$ciWorkflowFile, $$ciWorkflowContents);' || true)
+
+migrations-github-actions-move-release-management: #### Move .github/workflows/release-managment.yaml to .github/workflows/release-management.yaml ##*I*##
+ ($(DOCKER_RUN) mv .github/workflows/release-managment.yaml .github/workflows/release-management.yaml || true)
+
+migrations-github-actions-fix-management-in-release-management-referenced-workflow-file: #### Fix management in release-management referenced workflow file ##*I*##
+ ($(DOCKER_RUN) sed -i -e 's/release-managment.yaml/release-management.yaml/g' .github/workflows/release-management.yaml || true)
+
+migrations-github-actions-create-release-management-if-not-exists: #### Create Release Management Workflow if it doesn't exists at .github/workflows/release-management.yaml ##*I*##
+ ($(DOCKER_RUN) php -r '$$releaseManagementWorkflowFile = ".github/workflows/release-management.yaml"; $$releaseManagementWorkflowContents = base64_decode("bmFtZTogUmVsZWFzZSBNYW5hZ2VtZW50Cm9uOgogIHB1bGxfcmVxdWVzdDoKICAgIHR5cGVzOgogICAgICAtIG9wZW5lZAogICAgICAtIGxhYmVsZWQKICAgICAgLSB1bmxhYmVsZWQKICAgICAgLSBzeW5jaHJvbml6ZQogICAgICAtIHJlb3BlbmVkCiAgICAgIC0gbWlsZXN0b25lZAogICAgICAtIGRlbWlsZXN0b25lZAogICAgICAtIHJlYWR5X2Zvcl9yZXZpZXcKICBtaWxlc3RvbmU6CiAgICB0eXBlczoKICAgICAgLSBjbG9zZWQKcGVybWlzc2lvbnM6CiAgY29udGVudHM6IHdyaXRlCiAgaXNzdWVzOiB3cml0ZQogIHB1bGwtcmVxdWVzdHM6IHdyaXRlCmpvYnM6CiAgcmVsZWFzZS1tYW5hZ21lbnQ6CiAgICBuYW1lOiBSZWxlYXNlIE1hbmFnZW1lbnQKICAgIHVzZXM6IFd5cmlIYXhpbXVzL2dpdGh1Yi13b3JrZmxvd3MvLmdpdGh1Yi93b3JrZmxvd3MvcGFja2FnZS1yZWxlYXNlLW1hbmFnZW1lbnQueWFtbEBtYWluCiAgICB3aXRoOgogICAgICBtaWxlc3RvbmU6ICR7eyBnaXRodWIuZXZlbnQubWlsZXN0b25lLnRpdGxlIH19CiAgICAgIGRlc2NyaXB0aW9uOiAke3sgZ2l0aHViLmV2ZW50Lm1pbGVzdG9uZS50aXRsZSB9fQo="); if (file_exists($$releaseManagementWorkflowFile)) {exit;} file_put_contents($$releaseManagementWorkflowFile, $$releaseManagementWorkflowContents);' || true)
+
+migrations-renovate-remove-dependabot-config: #### Make sure we remove .github/dependabot.yml ##*I*##
+ ($(DOCKER_RUN) rm .github/dependabot.yml || true)
+ ($(DOCKER_RUN) rm .github/dependabot.yaml || true)
+
+migrations-renovate-move-config: #### Move renovate.json to .github/renovate.json ##*I*##
+ ($(DOCKER_RUN) mv renovate.json .github/renovate.json || true)
+
+migrations-renovate-create-config-if-not-exists: #### Create Renovate Config if it doesn't exists at .github/renovate.json ##*I*##
+ ($(DOCKER_RUN) php -r '$$renovateConfigFile = ".github/renovate.json"; $$renovateConfigContents = base64_decode("ewogICIkc2NoZW1hIjogImh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vcmVub3ZhdGUtc2NoZW1hLmpzb24iLAogICJleHRlbmRzIjogWwogICAgImdpdGh1Yj5XeXJpSGF4aW11cy9yZW5vdmF0ZS1jb25maWc6cGhwLXBhY2thZ2UiCiAgXQp9Cg=="); if (file_exists($$renovateConfigFile)) {exit;} file_put_contents($$renovateConfigFile, $$renovateConfigContents);' || true)
+
+migrations-renovate-point-at-correct-config: #### Ensure .github/renovate.json points at github>WyriHaximus/renovate-config:php-package instead of local>WyriHaximus/renovate-config ##*I*##
+ ($(DOCKER_RUN) php -r '$$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} file_put_contents($$renovateFIle, str_replace("local>WyriHaximus/renovate-config", "github>WyriHaximus/renovate-config:php-package", file_get_contents($$renovateFIle)));' || true)
+
+migration-renovate-set-php-constraint: #### Always keep renovate's constraints.php in sync with composer.json's config.platform.php ##*I*##
+ ($(DOCKER_RUN) php -r '$$composerFIle = "composer.json"; if (!file_exists($$composerFIle)) {exit;} $$json = json_decode(file_get_contents($$composerFIle), true); if (!array_key_exists("config", $$json)) {exit;} if (!array_key_exists("platform", $$json["config"])) {exit;} if (!array_key_exists("php", $$json["config"]["platform"])) {exit;} $$phpVersionConstraint = str_replace(".13", ".x", $$json["config"]["platform"]["php"]); $$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} $$json = json_decode(file_get_contents($$renovateFIle), true); if (!is_array($$json)) {exit;} if (!array_key_exists("constraints", $$json)) {$$json["constraints"] = [];} $$json["constraints"]["php"] = $$phpVersionConstraint; file_put_contents($$renovateFIle, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+migration-renovate-set-composer-constraint: #### Always keep renovate's constraints.composer at 2.x ##*I*##
+ ($(DOCKER_RUN) php -r '$$renovateFIle = ".github/renovate.json"; if (!file_exists($$renovateFIle)) {exit;} $$json = json_decode(file_get_contents($$renovateFIle), true); if (!is_array($$json)) {exit;} if (!array_key_exists("constraints", $$json)) {$$json["constraints"] = [];} $$json["constraints"]["composer"] = "2.x"; file_put_contents($$renovateFIle, json_encode($$json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\r\n");' || true)
+
+
+## Our default jobs
+
+on-install-or-update: ## Tasks, like migrations, that specifically have be run after composer install or update. These will also run by self hosted Renovate ####
+ $(DOCKER_RUN) $(MAKE) migrations-git-enforce-gitattributes-contents migrations-git-make-sure-gitignore-exists migrations-git-make-sure-gitignore-ignores-var migrations-git-make-sure-gitignore-excludes-var-gitkeep migrations-docs-update-readme-copyright-c-year-to-current migrations-docs-update-readme-copyright-year-to-current migrations-docs-update-etc-readme-template-copyright-c-year-to-current migrations-docs-update-etc-readme-template-copyright-year-to-current migrations-docs-create-license-when-it-doesnt-exists migrations-docs-update-license-copyright-c-year-to-current migrations-docs-update-license-copyright-year-to-current migrations-php-make-sure-var-exists migrations-php-make-sure-var-gitkeep-exists migrations-php-make-sure-etc-exists migrations-php-make-sure-etc-ci-exists migrations-php-make-sure-etc-qa-exists migrations-php-move-psalm-xml-config-to-etc migrations-php-remove-psalm-xml-config migrations-php-remove-old-phpunit-xml-dist-config migrations-php-remove-old-phpunit-xml-config migrations-php-ensure-etc-ci-markdown-link-checker-json-exists migrations-php-move-infection-config-to-etc migrations-php-infection-create-config-if-not-exists migrations-php-remove-phpunit-config-dir-from-infection migrations-php-fix-logs-relative-paths-for-infection migrations-php-infection-ensure-log-text-has-the-correct-path migrations-php-infection-ensure-log-summary-has-the-correct-path migrations-php-infection-ensure-log-json-has-the-correct-path migrations-php-infection-ensure-log-per-mutator-has-the-correct-path migrations-php-add-github-true-to-for-infection migrations-php-make-paths-compatible-with-infection-0-32 migrations-php-set-phpunit-ensure-config-file-exists migrations-php-set-phpunit-xsd-path-to-local migrations-php-set-phpunit-make-sure-we-see-all-the-warnings-deprecations-etc-etc-that-will-make-phpunit-do-a-non-happy-exit migrations-php-move-phpstan migrations-php-set-phpstan-ensure-config-file-exists migrations-php-set-phpstan-uncomment-parameters migrations-php-set-phpstan-add-parameters-if-it-isnt-present-in-the-config-file migrations-php-set-phpstan-paths-in-config migrations-php-set-phpstan-level-max-in-config migrations-php-set-phpstan-resolve-ergebnis-noExtends-classesAllowedToBeExtended migrations-php-set-phpstan-drop-checkGenericClassInNonGenericObjectType migrations-php-phpstan-add-prefix-for-anything-that-starts-with-vendor-in-a-list migrations-php-set-phpstan-drop-include-test-utilities-rules migrations-php-set-phpstan-drop-include-async-test-utilities-rules migrations-php-set-rector-create-config-if-not-exists migrations-php-composer-unused-create-config-if-not-exists migrations-php-composer-unused-drop-commented-out-line-scattered-across-my-repos migrations-php-move-phpcs migrations-php-move-phpcs-not-dist migrations-php-set-phpcs-ensure-config-file-exists migrations-php-phpcs-make-basepath-is-correct-relatively migrations-php-phpcs-make-cache-is-correct-relatively migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-etc migrations-php-phpcs-make-sure-etc-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-src migrations-php-phpcs-make-sure-src-has-no-trailing-slash migrations-php-phpcs-make-sure-config-has-correct-relative-path-for-tests migrations-php-phpcs-make-sure-tests-has-no-trailing-slash migrations-php-phpcs-make-sure-etc-is-ran-through migrations-phpcs-include-examples-directory-when-present migrations-php-move-composer-require-checker migrations-php-composer-require-checker-create-config-if-not-exists migrations-inline-code-phpstan-remove-line-phpstan-ignore-next-line migrations-inline-code-phpstan-remove-rest-of-line-phpstan-ignore-line migrations-inline-code-psalm-remove-line-psalm-suppress migrations-inline-code-remove-line-internal migrations-supported-features-php-ensure-we-only-cs-check-and-fix-tests-if-unit-tests-is-enabled migrations-supported-features-php-ensure-we-only-staticly-analyse-tests-with-phpstan-if-unit-tests-is-enabled migrations-supported-features-php-ensure-no-phpunit-config-file-is-present-when-unit-tests-are-disabled migrations-supported-features-php-ensure-no-infectionphp-config-file-is-present-when-unit-tests-are-disabled migrations-supported-features-php-ensure-no-rector-config-file-is-present-when-code-style-is-disabled migrations-supported-features-php-ensure-no-phpcs-config-file-is-present-when-code-style-is-disabled migrations-php-make-sure-github-exists migrations-github-codeowners migrations-php-make-sure-github-workflows-exists migrations-github-actions-remove-composer-diff migrations-github-actions-remove-markdown-check-links migrations-github-actions-remove-markdown-craft-release migrations-github-actions-remove-set-milestone-on-pr migrations-github-actions-move-ci migrations-github-actions-remove-ci-if-its-old-style-php-ci-workflow migrations-github-actions-create-ci-if-not-exists migrations-github-actions-move-release-management migrations-github-actions-fix-management-in-release-management-referenced-workflow-file migrations-github-actions-create-release-management-if-not-exists migrations-renovate-remove-dependabot-config migrations-renovate-move-config migrations-renovate-create-config-if-not-exists migrations-renovate-point-at-correct-config migration-renovate-set-php-constraint migration-renovate-set-composer-constraint composer-validate syntax-php composer-normalize rector-upgrade cs-fix ## Count: 97
+
+composer-validate: ## Ensure we don't require any package we don't use in this package directly ##*IC*##
+ $(DOCKER_SHELL) composer validate
+
+syntax-php: ## Lint PHP syntax ##*ILH*##
$(DOCKER_RUN) vendor/bin/parallel-lint --exclude vendor .
-cs-fix: ## Fix any automatically fixable code style issues
- $(DOCKER_RUN) vendor/bin/phpcbf --parallel=$(shell nproc) || $(DOCKER_RUN) vendor/bin/phpcbf --parallel=$(shell nproc) || $(DOCKER_RUN) vendor/bin/phpcbf --parallel=$(shell nproc) -vvvv
+composer-normalize: #### Normalize composer.json ##*I*##
+ $(DOCKER_RUN) composer normalize
+ $(MAKE) update-lock
+
+rector-upgrade: ## Upgrade any automatically upgradable old code ##*I*##^code-style^##
+ $(DOCKER_RUN) vendor/bin/rector -c ./etc/qa/rector.php
+
+cs-fix: ## Fix any automatically fixable code style issues ##*I*##^code-style^##
+ $(DOCKER_RUN) vendor/bin/phpcbf --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml || $(MAKE) cs
+
+cs-fix-debug: ## Fix any automatically fixable code style issues, but with debugging output ####^code-style^##
+ $(DOCKER_RUN) vendor/bin/phpcbf --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml -vvvv
+
+cs: ## Check the code for code style issues ##*LCH*##^code-style^##
+ $(DOCKER_SHELL) vendor/bin/phpcs --parallel=1 --cache=./var/.phpcs.cache.json --standard=./etc/qa/phpcs.xml
-cs: ## Check the code for code style issues
- $(DOCKER_RUN) vendor/bin/phpcs --parallel=$(shell nproc)
+stan: ## Run static analysis (PHPStan) ##*LCH*##^static-analysis^##
+ $(DOCKER_SHELL) vendor/bin/phpstan analyse --ansi --configuration=./etc/qa/phpstan.neon
-stan: ## Run static analysis (PHPStan)
- $(DOCKER_RUN) vendor/bin/phpstan analyse src tests --level max --ansi -c phpstan.neon
+unit-testing: ## Run tests ##*A*##^unit-tests^##
+ $(DOCKER_RUN_WITH_SOCKET) vendor/bin/phpunit --colors=always -c ./etc/qa/phpunit.xml $(shell $(DOCKER_SHELL) php -r 'if (function_exists("xdebug_get_code_coverage")) { echo " --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml"; }')
-psalm: ## Run static analysis (Psalm)
- $(DOCKER_RUN) vendor/bin/psalm --threads=$(shell nproc) --shepherd --stats
+unit-testing-raw: ## Run tests ##*D*##^unit-tests^##
+ php vendor/phpunit/phpunit/phpunit --colors=always -c ./etc/qa/phpunit.xml $(shell php -r 'if (function_exists("xdebug_get_code_coverage")) { echo " --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml"; }')
-unit-testing: ## Run tests
- $(DOCKER_RUN) vendor/bin/phpunit --colors=always -c phpunit.xml.dist --coverage-text --coverage-html covHtml --coverage-clover ./build/logs/clover.xml
- $(DOCKER_RUN) test -n "$(COVERALLS_REPO_TOKEN)" && test -n "$(COVERALLS_RUN_LOCALLY)" && test -f ./build/logs/clover.xml && vendor/bin/php-coveralls -v --coverage_clover ./build/logs/clover.xml --json_path ./build/logs/coveralls-upload.json || true
+unit-testing-filter: ## Run tests with specified filter ####^unit-tests^##
+ $(DOCKER_RUN_WITH_SOCKET) vendor/bin/phpunit --colors=always --filter=$(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) -c ./etc/qa/phpunit.xml $(shell $(DOCKER_SHELL) php -r 'if (function_exists("xdebug_get_code_coverage")) { echo " --coverage-text --coverage-html ./var/tests-unit-coverage-html --coverage-clover ./var/tests-unit-clover-coverage.xml"; }')
-mutation-testing: ## Run mutation testing
- $(DOCKER_RUN) vendor/bin/roave-infection-static-analysis-plugin --ansi --min-msi=100 --min-covered-msi=100 --threads=$(shell nproc)
+mutation-testing: ## Run mutation testing ##*LCH*##^static-analysis|unit-tests^##
+ $(DOCKER_RUN_WITH_SOCKET) vendor/bin/infection --ansi --log-verbosity=all --ignore-msi-with-no-mutations --configuration=./etc/qa/infection.json5 --static-analysis-tool=phpstan --static-analysis-tool-options="--memory-limit=-1" --threads=$(THREADS)
-composer-require-checker: ## Ensure we require every package used in this package directly
- $(DOCKER_RUN) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=composer-require-checker.json
+mutation-testing-raw: ## Run mutation testing ####^static-analysis|unit-tests^##
+ vendor/bin/infection --ansi --log-verbosity=all --ignore-msi-with-no-mutations --configuration=./etc/qa/infection.json5 --static-analysis-tool=phpstan --static-analysis-tool-options="--memory-limit=-1" --threads=$(THREADS)
-composer-unused: ## Ensure we don't require any package we don't use in this package directly
- $(DOCKER_RUN) composer unused --ansi
+composer-require-checker: ## Ensure we require every package used in this package directly ##*C*##^composer-dependency-checkers^##
+ $(DOCKER_SHELL) vendor/bin/composer-require-checker --ignore-parse-errors --ansi -vvv --config-file=./etc/qa/composer-require-checker.json
-backward-compatibility-check: ## Check code for backwards incompatible changes
- $(DOCKER_RUN) vendor/bin/roave-backward-compatibility-check || true
+composer-unused: ## Ensure we don't require any package we don't use in this package directly ##*C*##^composer-dependency-checkers^##
+ $(DOCKER_SHELL) vendor/bin/composer-unused --ansi --configuration=./etc/qa/composer-unused.php
-shell: ## Provides Shell access in the expected environment ###
- $(DOCKER_RUN) ash
+backward-compatibility-check: ## Check code for backwards incompatible changes ##*C*##
+ $(MAKE) backward-compatibility-check-raw || true
-task-list-ci: ## CI: Generate a JSON array of jobs to run, matches the commands run when running `make (|all)` ###
- @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -v "###" | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "%s\n", $$1}' | jq --raw-input --slurp -c 'split("\n")| .[0:-1]'
+backward-compatibility-check-raw: ## Check code for backwards incompatible changes, doesn't ignore the failure ###
+ $(DOCKER_SHELL) vendor/bin/roave-backward-compatibility-check
-help: ## Show this help ###
+install: ### Install dependencies ####
+ $(DOCKER_SHELL) composer install
+
+composer-require: ### Require passed dependencies ####
+ $(DOCKER_INTERACTIVE_SHELL) composer require -W $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
+
+update: ### Update dependencies ####
+ $(DOCKER_SHELL) composer update -W
+
+update-lock: ### Update lockfile ####
+ $(DOCKER_RUN) COMPOSER_DISABLE_NETWORK=1 composer update --lock --no-scripts || $(DOCKER_RUN) composer update --lock --no-scripts
+
+outdated: ### Show outdated dependencies ####
+ $(DOCKER_SHELL) composer outdated
+
+composer-show: ### Show dependencies ####
+ $(DOCKER_SHELL) composer show
+
+shell: ## Provides Shell access in the expected environment ####
+ $(DOCKER_INTERACTIVE_SHELL) bash
+
+help: ## Show this help ####
@printf "\033[33mUsage:\033[0m\n make [target]\n\n\033[33mTargets:\033[0m\n"
- @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#'
+ @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | grep -v "##U##" | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[32m%-32s\033[0m %s\n", $$1, $$2}' | tr -d '#'
+
+task-list-ci-all: ## CI: Generate a JSON array of jobs to run on all variations
+ @echo "[\"composer-validate\",\"syntax-php\",\"cs\",\"stan\",\"unit-testing\",\"mutation-testing\",\"composer-require-checker\",\"composer-unused\",\"backward-compatibility-check\"]" ## Count: 9
+
+task-list-ci-dos: ## CI: Generate a JSON array of jobs to run Directly on the OS variations
+ @echo "[\"unit-testing-raw\"]" ## Count: 1
+
+task-list-ci-low: ## CI: Generate a JSON array of jobs to run against the lowest dependencies on the primary threading target
+ @echo "[\"syntax-php\",\"cs\",\"stan\",\"mutation-testing\"]" ## Count: 4
+
+task-list-ci-locked: ## CI: Generate a JSON array of jobs to run against the locked dependencies on the primary threading target
+ @echo "[\"composer-validate\",\"cs\",\"stan\",\"mutation-testing\",\"composer-require-checker\",\"composer-unused\",\"backward-compatibility-check\"]" ## Count: 7
+
+task-list-ci-high: ## CI: Generate a JSON array of jobs to run against the highest dependencies on the primary threading target
+ @echo "[\"syntax-php\",\"cs\",\"stan\",\"mutation-testing\"]" ## Count: 4
+
+supported-features: ## CI: List the features this package supports
+ @echo "[\"code-style\",\"composer-dependency-checkers\",\"linux\",\"macos\",\"static-analysis\",\"unit-tests\",\"windows\"]" ## Count: 7
+
diff --git a/README.md b/README.md
index 06a8a25..55b2b31 100644
--- a/README.md
+++ b/README.md
@@ -73,7 +73,7 @@ $session = (new Session('', [], new RandomBytes()))->fromArray($array);
The MIT License (MIT)
-Copyright (c) 2020 Cees-Jan Kiewiet
+Copyright (c) 2026 Cees-Jan Kiewiet
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/composer.json b/composer.json
index 51ee425..5434fbc 100644
--- a/composer.json
+++ b/composer.json
@@ -1,53 +1,62 @@
{
- "name": "wyrihaximus/react-http-middleware-session",
- "description": "react/http middleware that takes care of session handling",
- "license": "MIT",
- "authors": [
- {
- "name": "Cees-Jan Kiewiet",
- "email": "ceesjank@gmail.com"
- }
- ],
- "require": {
- "php": "^8 || ^7.4",
- "ext-session": "^8 || ^7.4",
- "hansott/psr7-cookies": "^3.0.2",
- "psr/http-message": "^1.0.1",
- "react/cache": "^1.1.1",
- "react/http": "^1.2",
- "react/promise": "^2.8",
- "thecodingmachine/safe": "^1.3.3"
- },
- "require-dev": {
- "wyrihaximus/async-test-utilities": "^4.0"
- },
- "config": {
- "platform": {
- "php": "7.4.7"
- },
- "sort-packages": true
- },
- "extra": {
- "unused": [
- "react/http"
- ]
- },
- "autoload": {
- "psr-4": {
- "WyriHaximus\\React\\Http\\Middleware\\": "src/"
- }
+ "name": "wyrihaximus/react-http-middleware-session",
+ "description": "react/http middleware that takes care of session handling",
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "ceesjank@gmail.com"
+ }
+ ],
+ "require": {
+ "php": "^8.4",
+ "ext-random": "^8.4",
+ "ext-session": "^8.4",
+ "hansott/psr7-cookies": "^3.0.2",
+ "psr/http-message": "^1.1.0 || ^2.0",
+ "react/cache": "^1.2.0",
+ "react/http": "^1.11",
+ "react/promise": "^3.3.0"
+ },
+ "require-dev": {
+ "wyrihaximus/async-test-utilities": "^13.1.0",
+ "wyrihaximus/makefiles": "^0.11.1"
+ },
+ "autoload": {
+ "psr-4": {
+ "WyriHaximus\\React\\Http\\Middleware\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "WyriHaximus\\React\\Tests\\Http\\Middleware\\": "tests/"
+ }
+ },
+ "config": {
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true,
+ "ergebnis/composer-normalize": true,
+ "infection/extension-installer": true,
+ "phpstan/extension-installer": true,
+ "wyrihaximus/makefiles": true,
+ "wyrihaximus/test-utilities": true
},
- "autoload-dev": {
- "psr-4": {
- "WyriHaximus\\React\\Tests\\Http\\Middleware\\": "tests/"
- }
+ "platform": {
+ "php": "8.4.13"
},
- "scripts": {
- "post-install-cmd": [
- "composer normalize"
- ],
- "post-update-cmd": [
- "composer normalize"
- ]
- }
+ "sort-packages": true
+ },
+ "extra": {
+ "unused": [
+ "react/http"
+ ]
+ },
+ "scripts": {
+ "post-install-cmd": [
+ "make on-install-or-update || true"
+ ],
+ "post-update-cmd": [
+ "make on-install-or-update || true"
+ ]
+ }
}
diff --git a/composer.lock b/composer.lock
index e5b4516..1e063f7 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,32 +4,32 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "b85958a51d8d98b666fe3356df17bc3b",
+ "content-hash": "a7a67aaf317c95dfc7dbe378b4769ccb",
"packages": [
{
"name": "evenement/evenement",
- "version": "v3.0.1",
+ "version": "v3.0.2",
"source": {
"type": "git",
"url": "https://github.com/igorw/evenement.git",
- "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7"
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/igorw/evenement/zipball/531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
- "reference": "531bfb9d15f8aa57454f5f0285b18bec903b8fb7",
+ "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc",
+ "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc",
"shasum": ""
},
"require": {
"php": ">=7.0"
},
"require-dev": {
- "phpunit/phpunit": "^6.0"
+ "phpunit/phpunit": "^9 || ^6"
},
"type": "library",
"autoload": {
- "psr-0": {
- "Evenement": "src"
+ "psr-4": {
+ "Evenement\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -49,9 +49,9 @@
],
"support": {
"issues": "https://github.com/igorw/evenement/issues",
- "source": "https://github.com/igorw/evenement/tree/master"
+ "source": "https://github.com/igorw/evenement/tree/v3.0.2"
},
- "time": "2017-07-23T21:35:13+00:00"
+ "time": "2023-08-08T05:53:35+00:00"
},
{
"name": "fig/http-message-util",
@@ -172,25 +172,25 @@
},
{
"name": "psr/http-message",
- "version": "1.0.1",
+ "version": "1.1",
"source": {
"type": "git",
"url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": "^7.2 || ^8.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
},
"autoload": {
@@ -219,22 +219,22 @@
"response"
],
"support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
+ "source": "https://github.com/php-fig/http-message/tree/1.1"
},
- "time": "2016-08-06T14:39:51+00:00"
+ "time": "2023-04-04T09:50:52+00:00"
},
{
"name": "react/cache",
- "version": "v1.1.1",
+ "version": "v1.2.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/cache.git",
- "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e"
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/cache/zipball/4bf736a2cccec7298bdf745db77585966fc2ca7e",
- "reference": "4bf736a2cccec7298bdf745db77585966fc2ca7e",
+ "url": "https://api.github.com/repos/reactphp/cache/zipball/d47c472b64aa5608225f47965a484b75c7817d5b",
+ "reference": "d47c472b64aa5608225f47965a484b75c7817d5b",
"shasum": ""
},
"require": {
@@ -242,7 +242,7 @@
"react/promise": "^3.0 || ^2.0 || ^1.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ "phpunit/phpunit": "^9.5 || ^5.7 || ^4.8.35"
},
"type": "library",
"autoload": {
@@ -285,49 +285,45 @@
],
"support": {
"issues": "https://github.com/reactphp/cache/issues",
- "source": "https://github.com/reactphp/cache/tree/v1.1.1"
+ "source": "https://github.com/reactphp/cache/tree/v1.2.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2021-02-02T06:47:52+00:00"
+ "time": "2022-11-30T15:59:55+00:00"
},
{
"name": "react/dns",
- "version": "v1.10.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/dns.git",
- "reference": "a5427e7dfa47713e438016905605819d101f238c"
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/dns/zipball/a5427e7dfa47713e438016905605819d101f238c",
- "reference": "a5427e7dfa47713e438016905605819d101f238c",
+ "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3",
+ "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"react/cache": "^1.0 || ^0.6 || ^0.5",
"react/event-loop": "^1.2",
- "react/promise": "^3.0 || ^2.7 || ^1.2.1",
- "react/promise-timer": "^1.9"
+ "react/promise": "^3.2 || ^2.7 || ^1.2.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^4.8.35",
- "react/async": "^4 || ^3 || ^2"
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/async": "^4.3 || ^3 || ^2",
+ "react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
"psr-4": {
- "React\\Dns\\": "src"
+ "React\\Dns\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -365,49 +361,43 @@
],
"support": {
"issues": "https://github.com/reactphp/dns/issues",
- "source": "https://github.com/reactphp/dns/tree/v1.10.0"
+ "source": "https://github.com/reactphp/dns/tree/v1.14.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-09-08T12:22:46+00:00"
+ "time": "2025-11-18T19:34:28+00:00"
},
{
"name": "react/event-loop",
- "version": "v1.3.0",
+ "version": "v1.6.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/event-loop.git",
- "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137"
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/event-loop/zipball/187fb56f46d424afb6ec4ad089269c72eec2e137",
- "reference": "187fb56f46d424afb6ec4ad089269c72eec2e137",
+ "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
+ "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"suggest": {
- "ext-event": "~1.0 for ExtEventLoop",
- "ext-pcntl": "For signal handling support when using the StreamSelectLoop",
- "ext-uv": "* for ExtUvLoop"
+ "ext-pcntl": "For signal handling support when using the StreamSelectLoop"
},
"type": "library",
"autoload": {
"psr-4": {
- "React\\EventLoop\\": "src"
+ "React\\EventLoop\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -443,32 +433,28 @@
],
"support": {
"issues": "https://github.com/reactphp/event-loop/issues",
- "source": "https://github.com/reactphp/event-loop/tree/v1.3.0"
+ "source": "https://github.com/reactphp/event-loop/tree/v1.6.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-03-17T11:10:22+00:00"
+ "time": "2025-11-17T20:46:25+00:00"
},
{
"name": "react/http",
- "version": "v1.7.0",
+ "version": "v1.11.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/http.git",
- "reference": "4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa"
+ "reference": "8db02de41dcca82037367f67a2d4be365b1c4db9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/http/zipball/4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa",
- "reference": "4a1e85382e8c2a9e0fdb8ac04e94585da2083bfa",
+ "url": "https://api.github.com/repos/reactphp/http/zipball/8db02de41dcca82037367f67a2d4be365b1c4db9",
+ "reference": "8db02de41dcca82037367f67a2d4be365b1c4db9",
"shasum": ""
},
"require": {
@@ -477,24 +463,23 @@
"php": ">=5.3.0",
"psr/http-message": "^1.0",
"react/event-loop": "^1.2",
- "react/promise": "^2.3 || ^1.2.1",
- "react/promise-stream": "^1.1",
- "react/socket": "^1.9",
- "react/stream": "^1.2",
- "ringcentral/psr7": "^1.2"
+ "react/promise": "^3.2 || ^2.3 || ^1.2.1",
+ "react/socket": "^1.16",
+ "react/stream": "^1.4"
},
"require-dev": {
- "clue/http-proxy-react": "^1.7",
- "clue/reactphp-ssh-proxy": "^1.3",
- "clue/socks-react": "^1.3",
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
- "react/async": "^4 || ^3 || ^2",
- "react/promise-timer": "^1.9"
+ "clue/http-proxy-react": "^1.8",
+ "clue/reactphp-ssh-proxy": "^1.4",
+ "clue/socks-react": "^1.4",
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/async": "^4.2 || ^3 || ^2",
+ "react/promise-stream": "^1.4",
+ "react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
"psr-4": {
- "React\\Http\\": "src"
+ "React\\Http\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -539,39 +524,36 @@
],
"support": {
"issues": "https://github.com/reactphp/http/issues",
- "source": "https://github.com/reactphp/http/tree/v1.7.0"
+ "source": "https://github.com/reactphp/http/tree/v1.11.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-08-23T12:31:28+00:00"
+ "time": "2024-11-20T15:24:08+00:00"
},
{
"name": "react/promise",
- "version": "v2.9.0",
+ "version": "v3.3.0",
"source": {
"type": "git",
"url": "https://github.com/reactphp/promise.git",
- "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910"
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise/zipball/234f8fd1023c9158e2314fa9d7d0e6a83db42910",
- "reference": "234f8fd1023c9158e2314fa9d7d0e6a83db42910",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a",
+ "reference": "23444f53a813a3296c1368bb104793ce8d88f04a",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": ">=7.1.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.36"
+ "phpstan/phpstan": "1.12.28 || 1.4.10",
+ "phpunit/phpunit": "^9.6 || ^7.5"
},
"type": "library",
"autoload": {
@@ -615,49 +597,48 @@
],
"support": {
"issues": "https://github.com/reactphp/promise/issues",
- "source": "https://github.com/reactphp/promise/tree/v2.9.0"
+ "source": "https://github.com/reactphp/promise/tree/v3.3.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-02-11T10:27:51+00:00"
+ "time": "2025-08-19T18:57:03+00:00"
},
{
- "name": "react/promise-stream",
- "version": "v1.5.0",
+ "name": "react/socket",
+ "version": "v1.17.0",
"source": {
"type": "git",
- "url": "https://github.com/reactphp/promise-stream.git",
- "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3"
+ "url": "https://github.com/reactphp/socket.git",
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise-stream/zipball/e6d2805e09ad50c4896f65f5e8705fe4ee7731a3",
- "reference": "e6d2805e09ad50c4896f65f5e8705fe4ee7731a3",
+ "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08",
+ "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08",
"shasum": ""
},
"require": {
- "php": ">=5.3",
- "react/promise": "^3 || ^2.1 || ^1.2",
- "react/stream": "^1.0 || ^0.7 || ^0.6 || ^0.5 || ^0.4.6"
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.0",
+ "react/dns": "^1.13",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.2 || ^2.6 || ^1.2.1",
+ "react/stream": "^1.4"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36",
+ "react/async": "^4.3 || ^3.3 || ^2",
+ "react/promise-stream": "^1.4",
+ "react/promise-timer": "^1.11"
},
"type": "library",
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
- "React\\Promise\\Stream\\": "src/"
+ "React\\Socket\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -686,61 +667,53 @@
"homepage": "https://cboden.dev/"
}
],
- "description": "The missing link between Promise-land and Stream-land for ReactPHP",
- "homepage": "https://github.com/reactphp/promise-stream",
+ "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
"keywords": [
- "Buffer",
+ "Connection",
+ "Socket",
"async",
- "promise",
"reactphp",
- "stream",
- "unwrap"
+ "stream"
],
"support": {
- "issues": "https://github.com/reactphp/promise-stream/issues",
- "source": "https://github.com/reactphp/promise-stream/tree/v1.5.0"
+ "issues": "https://github.com/reactphp/socket/issues",
+ "source": "https://github.com/reactphp/socket/tree/v1.17.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-09-09T11:42:18+00:00"
+ "time": "2025-11-19T20:47:34+00:00"
},
{
- "name": "react/promise-timer",
- "version": "v1.9.0",
+ "name": "react/stream",
+ "version": "v1.4.0",
"source": {
"type": "git",
- "url": "https://github.com/reactphp/promise-timer.git",
- "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495"
+ "url": "https://github.com/reactphp/stream.git",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/promise-timer/zipball/aa7a73c74b8d8c0f622f5982ff7b0351bc29e495",
- "reference": "aa7a73c74b8d8c0f622f5982ff7b0351bc29e495",
+ "url": "https://api.github.com/repos/reactphp/stream/zipball/1e5b0acb8fe55143b5b426817155190eb6f5b18d",
+ "reference": "1e5b0acb8fe55143b5b426817155190eb6f5b18d",
"shasum": ""
},
"require": {
- "php": ">=5.3",
- "react/event-loop": "^1.2",
- "react/promise": "^3.0 || ^2.7.0 || ^1.2.1"
+ "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
+ "php": ">=5.3.8",
+ "react/event-loop": "^1.2"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ "clue/stream-filter": "~1.2",
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
},
"type": "library",
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
- "React\\Promise\\Timer\\": "src/"
+ "React\\Stream\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -769,64 +742,78 @@
"homepage": "https://cboden.dev/"
}
],
- "description": "A trivial implementation of timeouts for Promises, built on top of ReactPHP.",
- "homepage": "https://github.com/reactphp/promise-timer",
+ "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
"keywords": [
- "async",
- "event-loop",
- "promise",
+ "event-driven",
+ "io",
+ "non-blocking",
+ "pipe",
"reactphp",
- "timeout",
- "timer"
+ "readable",
+ "stream",
+ "writable"
],
"support": {
- "issues": "https://github.com/reactphp/promise-timer/issues",
- "source": "https://github.com/reactphp/promise-timer/tree/v1.9.0"
+ "issues": "https://github.com/reactphp/stream/issues",
+ "source": "https://github.com/reactphp/stream/tree/v1.4.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
}
],
- "time": "2022-06-13T13:41:03+00:00"
- },
+ "time": "2024-06-11T12:45:25+00:00"
+ }
+ ],
+ "packages-dev": [
{
- "name": "react/socket",
- "version": "v1.12.0",
+ "name": "azjezz/psl",
+ "version": "4.3.0",
"source": {
"type": "git",
- "url": "https://github.com/reactphp/socket.git",
- "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b"
+ "url": "https://github.com/php-standard-library/php-standard-library.git",
+ "reference": "74c95be0214eb7ea39146ed00ac4eb71b45d787b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/socket/zipball/81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b",
- "reference": "81e1b4d7f5450ebd8d2e9a95bb008bb15ca95a7b",
+ "url": "https://api.github.com/repos/php-standard-library/php-standard-library/zipball/74c95be0214eb7ea39146ed00ac4eb71b45d787b",
+ "reference": "74c95be0214eb7ea39146ed00ac4eb71b45d787b",
"shasum": ""
},
"require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.0",
- "react/dns": "^1.8",
- "react/event-loop": "^1.2",
- "react/promise": "^3 || ^2.6 || ^1.2.1",
- "react/promise-timer": "^1.9",
- "react/stream": "^1.2"
+ "ext-bcmath": "*",
+ "ext-intl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-sodium": "*",
+ "php": "~8.3.0 || ~8.4.0 || ~8.5.0",
+ "revolt/event-loop": "^1.0.7"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
- "react/async": "^4 || ^3 || ^2",
- "react/promise-stream": "^1.4"
+ "carthage-software/mago": "^1.6.0",
+ "infection/infection": "^0.31.2",
+ "php-coveralls/php-coveralls": "^2.7.0",
+ "phpbench/phpbench": "^1.4.0",
+ "phpunit/phpunit": "^9.6.22"
+ },
+ "suggest": {
+ "php-standard-library/phpstan-extension": "PHPStan integration",
+ "php-standard-library/psalm-plugin": "Psalm integration"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/hhvm/hsl",
+ "name": "hhvm/hsl"
+ }
+ },
"autoload": {
+ "files": [
+ "src/bootstrap.php"
+ ],
"psr-4": {
- "React\\Socket\\": "src"
+ "Psl\\": "src/Psl"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -835,168 +822,137 @@
],
"authors": [
{
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
- },
- {
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
+ "name": "azjezz",
+ "email": "azjezz@protonmail.com"
}
],
- "description": "Async, streaming plaintext TCP/IP and secure TLS socket server and client connections for ReactPHP",
- "keywords": [
- "Connection",
- "Socket",
- "async",
- "reactphp",
- "stream"
- ],
+ "description": "PHP Standard Library",
"support": {
- "issues": "https://github.com/reactphp/socket/issues",
- "source": "https://github.com/reactphp/socket/tree/v1.12.0"
+ "issues": "https://github.com/php-standard-library/php-standard-library/issues",
+ "source": "https://github.com/php-standard-library/php-standard-library/tree/4.3.0"
},
"funding": [
{
- "url": "https://github.com/WyriHaximus",
+ "url": "https://github.com/azjezz",
"type": "github"
},
{
- "url": "https://github.com/clue",
+ "url": "https://github.com/veewee",
"type": "github"
}
],
- "time": "2022-08-25T12:32:25+00:00"
+ "abandoned": "php-standard-library/php-standard-library",
+ "time": "2026-02-24T01:58:53+00:00"
},
{
- "name": "react/stream",
- "version": "v1.2.0",
+ "name": "beberlei/assert",
+ "version": "v3.3.4",
"source": {
"type": "git",
- "url": "https://github.com/reactphp/stream.git",
- "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9"
+ "url": "https://github.com/beberlei/assert.git",
+ "reference": "f193f4613c7d7fbcee2c05e4daff4061d49c040e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/reactphp/stream/zipball/7a423506ee1903e89f1e08ec5f0ed430ff784ae9",
- "reference": "7a423506ee1903e89f1e08ec5f0ed430ff784ae9",
+ "url": "https://api.github.com/repos/beberlei/assert/zipball/f193f4613c7d7fbcee2c05e4daff4061d49c040e",
+ "reference": "f193f4613c7d7fbcee2c05e4daff4061d49c040e",
"shasum": ""
},
"require": {
- "evenement/evenement": "^3.0 || ^2.0 || ^1.0",
- "php": ">=5.3.8",
- "react/event-loop": "^1.2"
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "ext-simplexml": "*",
+ "php": "^7.1 || ^8.0"
},
"require-dev": {
- "clue/stream-filter": "~1.2",
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35"
+ "friendsofphp/php-cs-fixer": "*",
+ "phpstan/phpstan": "*",
+ "phpunit/phpunit": ">=6.0.0",
+ "yoast/phpunit-polyfills": "^0.1.0"
+ },
+ "suggest": {
+ "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
},
"type": "library",
"autoload": {
+ "files": [
+ "lib/Assert/functions.php"
+ ],
"psr-4": {
- "React\\Stream\\": "src"
+ "Assert\\": "lib/Assert"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-2-Clause"
],
"authors": [
{
- "name": "Christian Lück",
- "email": "christian@clue.engineering",
- "homepage": "https://clue.engineering/"
- },
- {
- "name": "Cees-Jan Kiewiet",
- "email": "reactphp@ceesjankiewiet.nl",
- "homepage": "https://wyrihaximus.net/"
- },
- {
- "name": "Jan Sorgalla",
- "email": "jsorgalla@gmail.com",
- "homepage": "https://sorgalla.com/"
+ "name": "Benjamin Eberlei",
+ "email": "kontakt@beberlei.de",
+ "role": "Lead Developer"
},
{
- "name": "Chris Boden",
- "email": "cboden@gmail.com",
- "homepage": "https://cboden.dev/"
+ "name": "Richard Quadling",
+ "email": "rquadling@gmail.com",
+ "role": "Collaborator"
}
],
- "description": "Event-driven readable and writable streams for non-blocking I/O in ReactPHP",
+ "description": "Thin assertion library for input validation in business models.",
"keywords": [
- "event-driven",
- "io",
- "non-blocking",
- "pipe",
- "reactphp",
- "readable",
- "stream",
- "writable"
+ "assert",
+ "assertion",
+ "validation"
],
"support": {
- "issues": "https://github.com/reactphp/stream/issues",
- "source": "https://github.com/reactphp/stream/tree/v1.2.0"
+ "issues": "https://github.com/beberlei/assert/issues",
+ "source": "https://github.com/beberlei/assert/tree/v3.3.4"
},
- "funding": [
- {
- "url": "https://github.com/WyriHaximus",
- "type": "github"
- },
- {
- "url": "https://github.com/clue",
- "type": "github"
- }
- ],
- "time": "2021-07-11T12:37:55+00:00"
+ "time": "2026-06-10T19:47:05+00:00"
},
{
- "name": "ringcentral/psr7",
- "version": "1.3.0",
+ "name": "colinodell/json5",
+ "version": "v3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/ringcentral/psr7.git",
- "reference": "360faaec4b563958b673fb52bbe94e37f14bc686"
+ "url": "https://github.com/colinodell/json5.git",
+ "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ringcentral/psr7/zipball/360faaec4b563958b673fb52bbe94e37f14bc686",
- "reference": "360faaec4b563958b673fb52bbe94e37f14bc686",
+ "url": "https://api.github.com/repos/colinodell/json5/zipball/5724d21bc5c910c2560af1b8915f0cc0163579c8",
+ "reference": "5724d21bc5c910c2560af1b8915f0cc0163579c8",
"shasum": ""
},
"require": {
- "php": ">=5.3",
- "psr/http-message": "~1.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "php": "^8.0"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "mikehaertl/php-shellcommand": "^1.7.0",
+ "phpstan/phpstan": "^1.10.57",
+ "scrutinizer/ocular": "^1.9",
+ "squizlabs/php_codesniffer": "^3.8.1",
+ "symfony/finder": "^6.0|^7.0",
+ "symfony/phpunit-bridge": "^7.0.3"
},
+ "bin": [
+ "bin/json5"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "4.0-dev"
}
},
"autoload": {
"files": [
- "src/functions_include.php"
+ "src/global.php"
],
"psr-4": {
- "RingCentral\\Psr7\\": "src/"
+ "ColinODell\\Json5\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1005,203 +961,127 @@
],
"authors": [
{
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
+ "name": "Colin O'Dell",
+ "email": "colinodell@gmail.com",
+ "homepage": "https://www.colinodell.com",
+ "role": "Developer"
}
],
- "description": "PSR-7 message implementation",
+ "description": "UTF-8 compatible JSON5 parser for PHP",
+ "homepage": "https://github.com/colinodell/json5",
"keywords": [
- "http",
- "message",
- "stream",
- "uri"
+ "JSON5",
+ "json",
+ "json5_decode",
+ "json_decode"
],
"support": {
- "source": "https://github.com/ringcentral/psr7/tree/master"
+ "issues": "https://github.com/colinodell/json5/issues",
+ "source": "https://github.com/colinodell/json5/tree/v3.0.0"
},
- "time": "2018-05-29T20:21:04+00:00"
+ "funding": [
+ {
+ "url": "https://www.colinodell.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.paypal.me/colinpodell/10.00",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/colinodell",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/colinodell",
+ "type": "patreon"
+ }
+ ],
+ "time": "2024-02-09T13:06:12+00:00"
},
{
- "name": "thecodingmachine/safe",
- "version": "v1.3.3",
+ "name": "composer-unused/contracts",
+ "version": "0.3.0",
"source": {
"type": "git",
- "url": "https://github.com/thecodingmachine/safe.git",
- "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc"
+ "url": "https://github.com/composer-unused/contracts.git",
+ "reference": "5ec448d3ee80735dccad6a21a3266c377d0845ae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/a8ab0876305a4cdaef31b2350fcb9811b5608dbc",
- "reference": "a8ab0876305a4cdaef31b2350fcb9811b5608dbc",
+ "url": "https://api.github.com/repos/composer-unused/contracts/zipball/5ec448d3ee80735dccad6a21a3266c377d0845ae",
+ "reference": "5ec448d3ee80735dccad6a21a3266c377d0845ae",
"shasum": ""
},
"require": {
- "php": ">=7.2"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12",
- "squizlabs/php_codesniffer": "^3.2",
- "thecodingmachine/phpstan-strict-rules": "^0.12"
+ "php": "^7.4 || ^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.1-dev"
- }
- },
- "autoload": {
- "files": [
- "deprecated/apc.php",
- "deprecated/libevent.php",
- "deprecated/mssql.php",
- "deprecated/stats.php",
- "lib/special_cases.php",
- "generated/apache.php",
- "generated/apcu.php",
- "generated/array.php",
- "generated/bzip2.php",
- "generated/calendar.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/libxml.php",
- "generated/lzf.php",
- "generated/mailparse.php",
- "generated/mbstring.php",
- "generated/misc.php",
- "generated/msql.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/rpminfo.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/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"
- ],
- "psr-4": {
- "Safe\\": [
- "lib/",
- "deprecated/",
- "generated/"
- ]
+ "autoload": {
+ "psr-4": {
+ "ComposerUnused\\Contracts\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "authors": [
+ {
+ "name": "Andreas Frömer",
+ "email": "composer-unused@icanhazstring.com"
+ }
+ ],
+ "description": "Contract repository for composer-unused",
"support": {
- "issues": "https://github.com/thecodingmachine/safe/issues",
- "source": "https://github.com/thecodingmachine/safe/tree/v1.3.3"
+ "issues": "https://github.com/composer-unused/contracts/issues",
+ "source": "https://github.com/composer-unused/contracts/tree/0.3.0"
},
- "time": "2020-10-28T17:51:34+00:00"
- }
- ],
- "packages-dev": [
+ "funding": [
+ {
+ "url": "https://github.com/icanhazstring",
+ "type": "github"
+ }
+ ],
+ "time": "2023-03-17T00:41:49+00:00"
+ },
{
- "name": "amphp/amp",
- "version": "v2.6.2",
+ "name": "composer-unused/symbol-parser",
+ "version": "0.3.3",
"source": {
"type": "git",
- "url": "https://github.com/amphp/amp.git",
- "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb"
+ "url": "https://github.com/composer-unused/symbol-parser.git",
+ "reference": "afa62007cca768bd1ecbc0e8ed347c675c239410"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
- "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb",
+ "url": "https://api.github.com/repos/composer-unused/symbol-parser/zipball/afa62007cca768bd1ecbc0e8ed347c675c239410",
+ "reference": "afa62007cca768bd1ecbc0e8ed347c675c239410",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "composer-unused/contracts": "^0.3",
+ "nikic/php-parser": "^5.0",
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpdoc-parser": "^1.25 || ^2",
+ "psr/container": "^1.0 || ^2.0",
+ "psr/log": "^1.1 || ^2 || ^3",
+ "symfony/finder": "^5.3 || ^6.0 || ^7.0 || ^8.0"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^7 | ^8 | ^9",
- "psalm/phar": "^3.11@dev",
- "react/promise": "^2"
+ "ergebnis/composer-normalize": "^2.49",
+ "ext-ds": "*",
+ "phpstan/phpstan": "^2.1",
+ "phpunit/phpunit": "^10.5",
+ "roave/security-advisories": "dev-master",
+ "squizlabs/php_codesniffer": "^4.0.1",
+ "symfony/property-access": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/serializer": "^5.4 || ^6.0 || ^7.0 || ^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
"autoload": {
- "files": [
- "lib/functions.php",
- "lib/Internal/functions.php"
- ],
"psr-4": {
- "Amp\\": "lib"
+ "ComposerUnused\\SymbolParser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1210,86 +1090,67 @@
],
"authors": [
{
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "name": "Andreas Frömer",
+ "email": "composer-unused@icanhazstring.com"
}
],
- "description": "A non-blocking concurrency framework for PHP applications.",
- "homepage": "https://amphp.org/amp",
+ "description": "Toolkit to parse symbols from a composer package",
+ "homepage": "https://github.com/composer-unused/symbol-parser",
"keywords": [
- "async",
- "asynchronous",
- "awaitable",
- "concurrency",
- "event",
- "event-loop",
- "future",
- "non-blocking",
- "promise"
+ "composer",
+ "parser",
+ "symbol"
],
"support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v2.6.2"
+ "issues": "https://github.com/composer-unused/symbol-parser/issues",
+ "source": "https://github.com/composer-unused/symbol-parser"
},
"funding": [
{
- "url": "https://github.com/amphp",
+ "url": "https://github.com/sponsors/icanhazstring",
"type": "github"
+ },
+ {
+ "url": "https://paypal.me/icanhazstring",
+ "type": "other"
}
],
- "time": "2022-02-20T17:52:18+00:00"
+ "time": "2026-01-29T13:38:57+00:00"
},
{
- "name": "amphp/byte-stream",
- "version": "v1.8.1",
+ "name": "composer/ca-bundle",
+ "version": "1.5.12",
"source": {
"type": "git",
- "url": "https://github.com/amphp/byte-stream.git",
- "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd"
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "00a2f4201641d5c53f7fc0195e6c8d9fcc321a78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd",
- "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/00a2f4201641d5c53f7fc0195e6c8d9fcc321a78",
+ "reference": "00a2f4201641d5c53f7fc0195e6c8d9fcc321a78",
"shasum": ""
},
"require": {
- "amphp/amp": "^2",
- "php": ">=7.1"
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1.4",
- "friendsofphp/php-cs-fixer": "^2.3",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6 || ^7 || ^8",
- "psalm/phar": "^3.11.4"
+ "phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8 || ^9",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
- "files": [
- "lib/functions.php"
- ],
"psr-4": {
- "Amp\\ByteStream\\": "lib"
+ "Composer\\CaBundle\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1298,132 +1159,176 @@
],
"authors": [
{
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "http://amphp.org/byte-stream",
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": [
- "amp",
- "amphp",
- "async",
- "io",
- "non-blocking",
- "stream"
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
],
"support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/v1.8.1"
+ "irc": "irc://irc.freenode.org/composer",
+ "issues": "https://github.com/composer/ca-bundle/issues",
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.12"
},
"funding": [
{
- "url": "https://github.com/amphp",
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
"type": "github"
}
],
- "time": "2021-03-30T17:13:30+00:00"
+ "time": "2026-05-19T11:26:22+00:00"
},
{
- "name": "beberlei/assert",
- "version": "v3.2.7",
+ "name": "composer/class-map-generator",
+ "version": "1.7.3",
"source": {
"type": "git",
- "url": "https://github.com/beberlei/assert.git",
- "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf"
+ "url": "https://github.com/composer/class-map-generator.git",
+ "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/beberlei/assert/zipball/d63a6943fc4fd1a2aedb65994e3548715105abcf",
- "reference": "d63a6943fc4fd1a2aedb65994e3548715105abcf",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/86d8208fc3c649a3a999daf1a63c25201be2990f",
+ "reference": "86d8208fc3c649a3a999daf1a63c25201be2990f",
"shasum": ""
},
"require": {
- "ext-ctype": "*",
- "ext-json": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "php": "^7"
+ "composer/pcre": "^2.1 || ^3.1",
+ "php": "^7.2 || ^8.0",
+ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7 || ^8"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "*",
- "phpstan/phpstan-shim": "*",
- "phpunit/phpunit": ">=6.0.0 <8"
- },
- "suggest": {
- "ext-intl": "Needed to allow Assertion::count(), Assertion::isCountable(), Assertion::minCount(), and Assertion::maxCount() to operate on ResourceBundles"
+ "phpstan/phpstan": "^1.12 || ^2",
+ "phpstan/phpstan-deprecation-rules": "^1 || ^2",
+ "phpstan/phpstan-phpunit": "^1 || ^2",
+ "phpstan/phpstan-strict-rules": "^1.1 || ^2",
+ "phpunit/phpunit": "^8",
+ "symfony/filesystem": "^5.4 || ^6 || ^7 || ^8"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
"autoload": {
- "files": [
- "lib/Assert/functions.php"
- ],
"psr-4": {
- "Assert\\": "lib/Assert"
+ "Composer\\ClassMapGenerator\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-2-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Benjamin Eberlei",
- "email": "kontakt@beberlei.de",
- "role": "Lead Developer"
- },
- {
- "name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Collaborator"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
}
],
- "description": "Thin assertion library for input validation in business models.",
+ "description": "Utilities to scan PHP code and generate class maps.",
"keywords": [
- "assert",
- "assertion",
- "validation"
+ "classmap"
],
"support": {
- "issues": "https://github.com/beberlei/assert/issues",
- "source": "https://github.com/beberlei/assert/tree/v3"
+ "issues": "https://github.com/composer/class-map-generator/issues",
+ "source": "https://github.com/composer/class-map-generator/tree/1.7.3"
},
- "time": "2019-12-19T17:51:41+00:00"
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ }
+ ],
+ "time": "2026-05-05T09:17:07+00:00"
},
{
- "name": "clue/block-react",
- "version": "v1.5.0",
+ "name": "composer/composer",
+ "version": "2.10.1",
"source": {
"type": "git",
- "url": "https://github.com/clue/reactphp-block.git",
- "reference": "718b0571a94aa693c6fffc72182e87257ac900f3"
+ "url": "https://github.com/composer/composer.git",
+ "reference": "4120703b9bda8795075047b40361d7ec4d2abe49"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/clue/reactphp-block/zipball/718b0571a94aa693c6fffc72182e87257ac900f3",
- "reference": "718b0571a94aa693c6fffc72182e87257ac900f3",
+ "url": "https://api.github.com/repos/composer/composer/zipball/4120703b9bda8795075047b40361d7ec4d2abe49",
+ "reference": "4120703b9bda8795075047b40361d7ec4d2abe49",
"shasum": ""
},
"require": {
- "php": ">=5.3",
- "react/event-loop": "^1.2",
- "react/promise": "^3.0 || ^2.7 || ^1.2.1",
- "react/promise-timer": "^1.5"
+ "composer/ca-bundle": "^1.5",
+ "composer/class-map-generator": "^1.4.0",
+ "composer/metadata-minifier": "^1.0",
+ "composer/pcre": "^2.3 || ^3.3",
+ "composer/semver": "^3.3",
+ "composer/spdx-licenses": "^1.5.7",
+ "composer/xdebug-handler": "^2.0.2 || ^3.0.3",
+ "ext-json": "*",
+ "justinrainbow/json-schema": "^6.5.1",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "react/promise": "^3.3",
+ "seld/jsonlint": "^1.4",
+ "seld/phar-utils": "^1.2",
+ "seld/signal-handler": "^2.0",
+ "symfony/console": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0",
+ "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0",
+ "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.1.10 || ^8.0",
+ "symfony/polyfill-php73": "^1.24",
+ "symfony/polyfill-php80": "^1.24",
+ "symfony/polyfill-php81": "^1.24",
+ "symfony/polyfill-php84": "^1.30",
+ "symfony/process": "^5.4.47 || ^6.4.25 || ^7.1.10 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35",
- "react/http": "^1.4"
+ "phpstan/phpstan": "^1.11.8",
+ "phpstan/phpstan-deprecation-rules": "^1.2.0",
+ "phpstan/phpstan-phpunit": "^1.4.0",
+ "phpstan/phpstan-strict-rules": "^1.6.0",
+ "phpstan/phpstan-symfony": "^1.4.0",
+ "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0"
},
+ "suggest": {
+ "ext-curl": "Provides HTTP support (will fallback to PHP streams if missing)",
+ "ext-openssl": "Enables access to repositories and packages over HTTPS",
+ "ext-zip": "Allows direct extraction of ZIP archives (unzip/7z binaries will be used instead if available)",
+ "ext-zlib": "Enables gzip for HTTP requests"
+ },
+ "bin": [
+ "bin/composer"
+ ],
"type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "phpstan/rules.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "2.10-dev"
+ }
+ },
"autoload": {
- "files": [
- "src/functions_include.php"
- ]
+ "psr-4": {
+ "Composer\\": "src/Composer/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1431,62 +1336,62 @@
],
"authors": [
{
- "name": "Christian Lück",
- "email": "christian@clue.engineering"
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "https://www.naderman.de"
+ },
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
}
],
- "description": "Lightweight library that eases integrating async components built for ReactPHP in a traditional, blocking environment.",
- "homepage": "https://github.com/clue/reactphp-block",
+ "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
+ "homepage": "https://getcomposer.org/",
"keywords": [
- "async",
- "await",
- "blocking",
- "event loop",
- "promise",
- "reactphp",
- "sleep",
- "synchronous"
+ "autoload",
+ "dependency",
+ "package"
],
"support": {
- "issues": "https://github.com/clue/reactphp-block/issues",
- "source": "https://github.com/clue/reactphp-block/tree/v1.5.0"
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/composer/issues",
+ "security": "https://github.com/composer/composer/security/policy",
+ "source": "https://github.com/composer/composer/tree/2.10.1"
},
"funding": [
{
- "url": "https://clue.engineering/support",
+ "url": "https://packagist.com",
"type": "custom"
},
{
- "url": "https://github.com/clue",
+ "url": "https://github.com/composer",
"type": "github"
}
],
- "time": "2021-10-20T14:07:33+00:00"
+ "time": "2026-06-04T08:25:59+00:00"
},
{
- "name": "composer/ca-bundle",
- "version": "1.3.1",
+ "name": "composer/metadata-minifier",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/composer/ca-bundle.git",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b"
+ "url": "https://github.com/composer/metadata-minifier.git",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
- "reference": "4c679186f2aca4ab6a0f1b0b9cf9252decb44d0b",
+ "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
"shasum": ""
},
"require": {
- "ext-openssl": "*",
- "ext-pcre": "*",
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
+ "composer/composer": "^2",
"phpstan/phpstan": "^0.12.55",
- "psr/log": "^1.0",
- "symfony/phpunit-bridge": "^4.2 || ^5",
- "symfony/process": "^2.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
+ "symfony/phpunit-bridge": "^4.2 || ^5"
},
"type": "library",
"extra": {
@@ -1496,7 +1401,7 @@
},
"autoload": {
"psr-4": {
- "Composer\\CaBundle\\": "src"
+ "Composer\\MetadataMinifier\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1510,18 +1415,14 @@
"homepage": "http://seld.be"
}
],
- "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
+ "description": "Small utility library that handles metadata minification and expansion.",
"keywords": [
- "cabundle",
- "cacert",
- "certificate",
- "ssl",
- "tls"
+ "composer",
+ "compression"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.3.1"
+ "issues": "https://github.com/composer/metadata-minifier/issues",
+ "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
},
"funding": [
{
@@ -1537,61 +1438,48 @@
"type": "tidelift"
}
],
- "time": "2021-10-28T20:44:15+00:00"
+ "time": "2021-04-07T13:37:33+00:00"
},
{
- "name": "composer/composer",
- "version": "1.10.26",
+ "name": "composer/pcre",
+ "version": "3.4.0",
"source": {
"type": "git",
- "url": "https://github.com/composer/composer.git",
- "reference": "3e196135eacf9e519a6b00986bc6fe6aff977997"
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/composer/zipball/3e196135eacf9e519a6b00986bc6fe6aff977997",
- "reference": "3e196135eacf9e519a6b00986bc6fe6aff977997",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/d5a341b3fb61f3001970940afb1d332968a183ed",
+ "reference": "d5a341b3fb61f3001970940afb1d332968a183ed",
"shasum": ""
},
"require": {
- "composer/ca-bundle": "^1.0",
- "composer/semver": "^1.0",
- "composer/spdx-licenses": "^1.2",
- "composer/xdebug-handler": "^1.1",
- "justinrainbow/json-schema": "^5.2.10",
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0",
- "seld/jsonlint": "^1.4",
- "seld/phar-utils": "^1.0",
- "symfony/console": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/filesystem": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/finder": "^2.7 || ^3.0 || ^4.0 || ^5.0",
- "symfony/process": "^2.7 || ^3.0 || ^4.0 || ^5.0"
+ "php": "^7.4 || ^8.0"
},
"conflict": {
- "symfony/console": "2.8.38"
+ "phpstan/phpstan": "<2.2.2"
},
"require-dev": {
- "phpspec/prophecy": "^1.10",
- "symfony/phpunit-bridge": "^4.2"
- },
- "suggest": {
- "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages",
- "ext-zip": "Enabling the zip extension allows you to unzip archives",
- "ext-zlib": "Allow gzip compression of HTTP requests"
+ "phpstan/phpstan": "^2",
+ "phpstan/phpstan-deprecation-rules": "^2",
+ "phpstan/phpstan-strict-rules": "^2",
+ "phpunit/phpunit": "^9"
},
- "bin": [
- "bin/composer"
- ],
"type": "library",
"extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-main": "3.x-dev"
}
},
"autoload": {
"psr-4": {
- "Composer\\": "src/Composer"
+ "Composer\\Pcre\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1599,101 +1487,22 @@
"MIT"
],
"authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
{
"name": "Jordi Boggiano",
"email": "j.boggiano@seld.be",
"homepage": "http://seld.be"
}
],
- "description": "Composer helps you declare, manage and install dependencies of PHP projects. It ensures you have the right stack everywhere.",
- "homepage": "https://getcomposer.org/",
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
- "autoload",
- "dependency",
- "package"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/composer/issues",
- "source": "https://github.com/composer/composer/tree/1.10.26"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2022-04-13T14:39:56+00:00"
- },
- {
- "name": "composer/package-versions-deprecated",
- "version": "1.11.99.5",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/package-versions-deprecated.git",
- "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/b4f54f74ef3453349c24a845d22392cd31e65f1d",
- "reference": "b4f54f74ef3453349c24a845d22392cd31e65f1d",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.1.0 || ^2.0",
- "php": "^7 || ^8"
- },
- "replace": {
- "ocramius/package-versions": "1.11.99"
- },
- "require-dev": {
- "composer/composer": "^1.9.3 || ^2.0@dev",
- "ext-zip": "^1.13",
- "phpunit/phpunit": "^6.5 || ^7"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "PackageVersions\\Installer",
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PackageVersions\\": "src/PackageVersions"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
- }
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
],
- "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
"support": {
- "issues": "https://github.com/composer/package-versions-deprecated/issues",
- "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.5"
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.4.0"
},
"funding": [
{
@@ -1703,38 +1512,35 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2022-01-17T14:14:24+00:00"
+ "time": "2026-06-07T11:47:49+00:00"
},
{
"name": "composer/semver",
- "version": "1.7.2",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/647490bbcaf7fc4891c58f47b825eb99d19c377a",
- "reference": "647490bbcaf7fc4891c58f47b825eb99d19c377a",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
"php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.5 || ^5.0.5"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "3.x-dev"
}
},
"autoload": {
@@ -1771,9 +1577,9 @@
"versioning"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/1.7.2"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -1783,34 +1589,30 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2020-12-03T15:47:16+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "composer/spdx-licenses",
- "version": "1.5.6",
+ "version": "1.6.0",
"source": {
"type": "git",
"url": "https://github.com/composer/spdx-licenses.git",
- "reference": "a30d487169d799745ca7280bc90fdfa693536901"
+ "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/a30d487169d799745ca7280bc90fdfa693536901",
- "reference": "a30d487169d799745ca7280bc90fdfa693536901",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/5ecd0cb4177696f9fd48f1605dda81db3dee7889",
+ "reference": "5ecd0cb4177696f9fd48f1605dda81db3dee7889",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "phpstan/phpstan": "^0.12.55",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^6.4.25 || ^7.3.3 || ^8.0"
},
"type": "library",
"extra": {
@@ -1851,9 +1653,9 @@
"validator"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/spdx-licenses/issues",
- "source": "https://github.com/composer/spdx-licenses/tree/1.5.6"
+ "source": "https://github.com/composer/spdx-licenses/tree/1.6.0"
},
"funding": [
{
@@ -1863,35 +1665,33 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2021-11-18T10:14:14+00:00"
+ "time": "2026-04-08T20:18:39+00:00"
},
{
"name": "composer/xdebug-handler",
- "version": "1.4.6",
+ "version": "3.0.5",
"source": {
"type": "git",
"url": "https://github.com/composer/xdebug-handler.git",
- "reference": "f27e06cd9675801df441b3656569b328e04aa37c"
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c",
- "reference": "f27e06cd9675801df441b3656569b328e04aa37c",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
},
"require-dev": {
- "phpstan/phpstan": "^0.12.55",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
},
"type": "library",
"autoload": {
@@ -1915,9 +1715,9 @@
"performance"
],
"support": {
- "irc": "irc://irc.freenode.org/composer",
+ "irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/1.4.6"
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
},
"funding": [
{
@@ -1933,39 +1733,42 @@
"type": "tidelift"
}
],
- "time": "2021-03-25T17:01:18+00:00"
+ "time": "2024-05-06T16:37:16+00:00"
},
{
"name": "dealerdirect/phpcodesniffer-composer-installer",
- "version": "v0.7.2",
+ "version": "v1.2.1",
"source": {
"type": "git",
- "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git",
- "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db"
+ "url": "https://github.com/PHPCSStandards/composer-installer.git",
+ "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
- "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db",
+ "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/963f0c67bffde0eac41b56be71ac0e8ba132f0bd",
+ "reference": "963f0c67bffde0eac41b56be71ac0e8ba132f0bd",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^1.0 || ^2.0",
- "php": ">=5.3",
- "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
+ "composer-plugin-api": "^2.2",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^3.1.0 || ^4.0"
},
"require-dev": {
- "composer/composer": "*",
- "php-parallel-lint/php-parallel-lint": "^1.3.1",
- "phpcompatibility/php-compatibility": "^9.0"
+ "composer/composer": "^2.2",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev",
+ "yoast/phpunit-polyfills": "^1.0"
},
"type": "composer-plugin",
"extra": {
- "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
+ "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
},
"autoload": {
"psr-4": {
- "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
+ "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1975,17 +1778,16 @@
"authors": [
{
"name": "Franck Nijhof",
- "email": "franck.nijhof@dealerdirect.com",
- "homepage": "http://www.frenck.nl",
- "role": "Developer / IT Manager"
+ "email": "opensource@frenck.dev",
+ "homepage": "https://frenck.dev",
+ "role": "Open source developer"
},
{
"name": "Contributors",
- "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors"
+ "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
}
],
"description": "PHP_CodeSniffer Standards Composer Installer Plugin",
- "homepage": "http://www.dealerdirect.com",
"keywords": [
"PHPCodeSniffer",
"PHP_CodeSniffer",
@@ -2005,116 +1807,49 @@
"tests"
],
"support": {
- "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues",
- "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer"
- },
- "time": "2022-02-04T12:51:07+00:00"
- },
- {
- "name": "dereuromark/composer-prefer-lowest",
- "version": "0.1.10",
- "source": {
- "type": "git",
- "url": "https://github.com/dereuromark/composer-prefer-lowest.git",
- "reference": "9290203cfc25d4a2d0605cb3119bb227aa1195d6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dereuromark/composer-prefer-lowest/zipball/9290203cfc25d4a2d0605cb3119bb227aa1195d6",
- "reference": "9290203cfc25d4a2d0605cb3119bb227aa1195d6",
- "shasum": ""
- },
- "require": {
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "ext-json": "*",
- "php": ">=7.3"
- },
- "require-dev": {
- "fig-r/psr2r-sniffer": "dev-master",
- "phpunit/phpunit": "^9.5"
- },
- "bin": [
- "bin/validate-prefer-lowest"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "ComposerPreferLowest\\": "src/"
- }
+ "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
+ "security": "https://github.com/PHPCSStandards/composer-installer/security/policy",
+ "source": "https://github.com/PHPCSStandards/composer-installer"
},
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
+ "funding": [
{
- "name": "Mark Scherer",
- "email": "euromark@web.de"
- }
- ],
- "description": "Checks prefer-lowest more strictly. Add-on for CI.",
- "support": {
- "issues": "https://github.com/dereuromark/composer-prefer-lowest/issues",
- "source": "https://github.com/dereuromark/composer-prefer-lowest/tree/0.1.10"
- },
- "time": "2021-11-02T02:20:22+00:00"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
+ "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"
}
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
],
- "description": "implementation of xdg base directory specification for php",
- "support": {
- "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
- "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
- },
- "time": "2019-12-04T15:06:13+00:00"
+ "time": "2026-05-06T08:26:05+00:00"
},
{
"name": "doctrine/coding-standard",
- "version": "9.0.0",
+ "version": "14.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/coding-standard.git",
- "reference": "35a2452c6025cb739c3244b3348bcd1604df07d1"
+ "reference": "897a7dc209e49ee6cf04e689c41112df17967130"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/35a2452c6025cb739c3244b3348bcd1604df07d1",
- "reference": "35a2452c6025cb739c3244b3348bcd1604df07d1",
+ "url": "https://api.github.com/repos/doctrine/coding-standard/zipball/897a7dc209e49ee6cf04e689c41112df17967130",
+ "reference": "897a7dc209e49ee6cf04e689c41112df17967130",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
- "php": "^7.1 || ^8.0",
- "slevomat/coding-standard": "^7.0.0",
- "squizlabs/php_codesniffer": "^3.6.0"
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0.0",
+ "php": "^7.4 || ^8.0",
+ "slevomat/coding-standard": "^8.23",
+ "squizlabs/php_codesniffer": "^4"
},
"type": "phpcodesniffer-standard",
"notification-url": "https://packagist.org/downloads/",
@@ -2138,6 +1873,7 @@
"code",
"coding",
"cs",
+ "dev",
"doctrine",
"rules",
"sniffer",
@@ -2147,40 +1883,66 @@
],
"support": {
"issues": "https://github.com/doctrine/coding-standard/issues",
- "source": "https://github.com/doctrine/coding-standard/tree/9.0.0"
+ "source": "https://github.com/doctrine/coding-standard/tree/14.0.0"
},
- "time": "2021-04-12T15:11:14+00:00"
+ "time": "2025-09-21T18:21:47+00:00"
},
{
- "name": "doctrine/instantiator",
- "version": "1.4.0",
+ "name": "ergebnis/composer-normalize",
+ "version": "2.52.0",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
+ "url": "https://github.com/ergebnis/composer-normalize.git",
+ "reference": "988f83f5e51a42cdd2337e5fcd935432f8dfa33c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
+ "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/988f83f5e51a42cdd2337e5fcd935432f8dfa33c",
+ "reference": "988f83f5e51a42cdd2337e5fcd935432f8dfa33c",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "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": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ "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"
+ }
},
- "type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ "Ergebnis\\Composer\\Normalize\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2189,72 +1951,66 @@
],
"authors": [
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
+ "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 a composer plugin for normalizing composer.json.",
+ "homepage": "https://github.com/ergebnis/composer-normalize",
"keywords": [
- "constructor",
- "instantiate"
+ "composer",
+ "normalize",
+ "normalizer",
+ "plugin"
],
"support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
+ "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"
},
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
+ "time": "2026-05-15T15:39:24+00:00"
},
{
- "name": "ergebnis/composer-normalize",
- "version": "2.23.1",
+ "name": "ergebnis/json",
+ "version": "1.6.0",
"source": {
"type": "git",
- "url": "https://github.com/ergebnis/composer-normalize.git",
- "reference": "a54e28d1338903d9b6043d2187ed0f059d89938f"
+ "url": "https://github.com/ergebnis/json.git",
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/composer-normalize/zipball/a54e28d1338903d9b6043d2187ed0f059d89938f",
- "reference": "a54e28d1338903d9b6043d2187ed0f059d89938f",
+ "url": "https://api.github.com/repos/ergebnis/json/zipball/7b56d2b5d9e897e75b43e2e753075a0904c921b1",
+ "reference": "7b56d2b5d9e897e75b43e2e753075a0904c921b1",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^2.0.0",
- "ergebnis/json-normalizer": "~2.1.0",
- "ergebnis/json-printer": "^3.2.0",
- "justinrainbow/json-schema": "^5.2.11",
- "localheinz/diff": "^1.1.1",
- "php": "^7.4 || ^8.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": {
- "composer/composer": "^2.2.5",
- "ergebnis/license": "^1.2.0",
- "ergebnis/php-cs-fixer-config": "^3.4.0",
- "fakerphp/faker": "^1.18.0",
- "phpunit/phpunit": "^9.5.13",
- "psalm/plugin-phpunit": "~0.16.1",
- "symfony/filesystem": "^5.4.3",
- "vimeo/psalm": "^4.18.1"
+ "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": "composer-plugin",
+ "type": "library",
"extra": {
- "class": "Ergebnis\\Composer\\Normalize\\NormalizePlugin",
+ "branch-alias": {
+ "dev-main": "1.7-dev"
+ },
"composer-normalize": {
"indent-size": 2,
"indent-style": "space"
@@ -2262,7 +2018,7 @@
},
"autoload": {
"psr-4": {
- "Ergebnis\\Composer\\Normalize\\": "src/"
+ "Ergebnis\\Json\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2272,61 +2028,75 @@
"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 value object for representing a valid JSON string.",
+ "homepage": "https://github.com/ergebnis/json",
"keywords": [
- "composer",
- "normalize",
- "normalizer",
- "plugin"
+ "json"
],
"support": {
- "issues": "https://github.com/ergebnis/composer-normalize/issues",
- "source": "https://github.com/ergebnis/composer-normalize"
+ "issues": "https://github.com/ergebnis/json/issues",
+ "security": "https://github.com/ergebnis/json/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/json"
},
- "funding": [
- {
- "url": "https://github.com/localheinz",
- "type": "github"
- }
- ],
- "time": "2022-01-31T06:49:30+00:00"
+ "time": "2025-09-06T09:08:45+00:00"
},
{
"name": "ergebnis/json-normalizer",
- "version": "2.1.0",
+ "version": "4.10.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-normalizer.git",
- "reference": "2039eb11131a243b9204bf51219baa08935e6b1d"
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/2039eb11131a243b9204bf51219baa08935e6b1d",
- "reference": "2039eb11131a243b9204bf51219baa08935e6b1d",
+ "url": "https://api.github.com/repos/ergebnis/json-normalizer/zipball/77961faf2c651c3f05977b53c6c68e8434febf62",
+ "reference": "77961faf2c651c3f05977b53c6c68e8434febf62",
"shasum": ""
},
"require": {
- "ergebnis/json-printer": "^3.2.0",
- "ergebnis/json-schema-validator": "^2.0.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.11",
- "php": "^7.4 || ^8.0"
+ "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/data-provider": "^1.0.0",
- "ergebnis/license": "^1.2.0",
- "ergebnis/php-cs-fixer-config": "^3.4.0",
- "fakerphp/faker": "^1.17.0",
- "infection/infection": "~0.25.5",
- "phpunit/phpunit": "^9.5.11",
- "psalm/plugin-phpunit": "~0.16.1",
- "vimeo/psalm": "^4.17.0"
+ "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"
+ }
},
- "type": "library",
"autoload": {
"psr-4": {
"Ergebnis\\Json\\Normalizer\\": "src/"
@@ -2339,7 +2109,8 @@
"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.",
@@ -2350,45 +2121,131 @@
],
"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"
},
- "funding": [
+ "time": "2025-09-06T09:18:13+00:00"
+ },
+ {
+ "name": "ergebnis/json-pointer",
+ "version": "3.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ergebnis/json-pointer.git",
+ "reference": "b58c3c468a7ff109fdf9a255f17de29ecbe5276c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ergebnis/json-pointer/zipball/b58c3c468a7ff109fdf9a255f17de29ecbe5276c",
+ "reference": "b58c3c468a7ff109fdf9a255f17de29ecbe5276c",
+ "shasum": ""
+ },
+ "require": {
+ "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/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-main": "3.8-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Ergebnis\\Json\\Pointer\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
{
- "url": "https://github.com/localheinz",
- "type": "github"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "time": "2022-01-04T11:19:55+00:00"
+ "description": "Provides an abstraction of a JSON pointer.",
+ "homepage": "https://github.com/ergebnis/json-pointer",
+ "keywords": [
+ "RFC6901",
+ "json",
+ "pointer"
+ ],
+ "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/json-printer",
- "version": "3.2.0",
+ "version": "3.8.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-printer.git",
- "reference": "651cab2b7604a6b338d0d16749f5ea0851a68005"
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/651cab2b7604a6b338d0d16749f5ea0851a68005",
- "reference": "651cab2b7604a6b338d0d16749f5ea0851a68005",
+ "url": "https://api.github.com/repos/ergebnis/json-printer/zipball/211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
+ "reference": "211d73fc7ec6daf98568ee6ed6e6d133dee8503e",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-mbstring": "*",
- "php": "^7.4 || ^8.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/license": "^1.1.0",
- "ergebnis/php-cs-fixer-config": "^3.4.0",
- "fakerphp/faker": "^1.17.0",
- "infection/infection": "~0.25.5",
- "phpunit/phpunit": "^9.5.11",
- "psalm/plugin-phpunit": "~0.16.1",
- "vimeo/psalm": "^4.16.1"
+ "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": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.9-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
"Ergebnis\\Json\\Printer\\": "src/"
@@ -2401,7 +2258,8 @@
"authors": [
{
"name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
"description": "Provides a JSON printer, allowing for flexible indentation.",
@@ -2413,48 +2271,53 @@
],
"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"
},
- "funding": [
- {
- "url": "https://github.com/localheinz",
- "type": "github"
- }
- ],
- "time": "2021-12-27T12:39:13+00:00"
+ "time": "2025-09-06T09:59:26+00:00"
},
{
"name": "ergebnis/json-schema-validator",
- "version": "2.0.0",
+ "version": "4.5.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/json-schema-validator.git",
- "reference": "dacd8a47c1cc2c426ec71e952da3609ebe901fac"
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/dacd8a47c1cc2c426ec71e952da3609ebe901fac",
- "reference": "dacd8a47c1cc2c426ec71e952da3609ebe901fac",
+ "url": "https://api.github.com/repos/ergebnis/json-schema-validator/zipball/b739527a480a9e3651360ad351ea77e7e9019df2",
+ "reference": "b739527a480a9e3651360ad351ea77e7e9019df2",
"shasum": ""
},
"require": {
+ "ergebnis/json": "^1.2.0",
+ "ergebnis/json-pointer": "^3.4.0",
"ext-json": "*",
- "justinrainbow/json-schema": "^5.2.10",
- "php": "^7.4 || ^8.0"
+ "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/composer-normalize": "^2.18.0",
- "ergebnis/data-provider": "^1.0.0",
- "ergebnis/license": "^1.1.0",
- "ergebnis/php-cs-fixer-config": "~3.4.0",
- "fakerphp/faker": "^1.17.0",
- "infection/infection": "~0.25.3",
- "phpunit/phpunit": "~9.5.10",
- "psalm/plugin-phpunit": "~0.16.1",
- "vimeo/psalm": "^4.15.0"
+ "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"
@@ -2472,7 +2335,8 @@
"authors": [
{
"name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
"description": "Provides a JSON schema validator, building on top of justinrainbow/json-schema.",
@@ -2484,50 +2348,46 @@
],
"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"
},
- "funding": [
- {
- "url": "https://github.com/localheinz",
- "type": "github"
- }
- ],
- "time": "2021-12-13T16:54:56+00:00"
+ "time": "2025-09-06T11:37:35+00:00"
},
{
"name": "ergebnis/phpstan-rules",
- "version": "0.15.3",
+ "version": "2.13.1",
"source": {
"type": "git",
"url": "https://github.com/ergebnis/phpstan-rules.git",
- "reference": "78a3dd88893cf3250ba339843503dcea7e9bee64"
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/78a3dd88893cf3250ba339843503dcea7e9bee64",
- "reference": "78a3dd88893cf3250ba339843503dcea7e9bee64",
+ "url": "https://api.github.com/repos/ergebnis/phpstan-rules/zipball/f69db86b98595c34fc1f61c89fe3b380141aa519",
+ "reference": "f69db86b98595c34fc1f61c89fe3b380141aa519",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
- "nikic/php-parser": "^4.2.3",
- "php": "^7.2 || ^8.0",
- "phpstan/phpstan": "~0.11.15 || ~0.12.0"
+ "php": "~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0",
+ "phpstan/phpstan": "^2.1.35"
},
"require-dev": {
- "ergebnis/composer-normalize": "^2.9.0",
- "ergebnis/license": "^1.1.0",
- "ergebnis/php-cs-fixer-config": "^2.5.1",
- "ergebnis/test-util": "^1.3.0",
- "infection/infection": "~0.15.3",
- "nette/di": "^3.0.1",
- "phpstan/phpstan-deprecation-rules": "~0.11.2",
- "phpstan/phpstan-strict-rules": "~0.11.1",
- "phpunit/phpunit": "^8.5.8",
- "psalm/plugin-phpunit": "~0.12.2",
- "psr/container": "^1.0.0",
- "vimeo/psalm": "^3.18",
- "zendframework/zend-servicemanager": "^2.0.0"
+ "codeception/codeception": "^4.0.0 || ^5.0.0",
+ "doctrine/orm": "^2.20.0 || ^3.3.0",
+ "ergebnis/composer-normalize": "^2.49.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.59.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.20.0",
+ "fakerphp/faker": "^1.24.1",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan-deprecation-rules": "^2.0.3",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpstan/phpstan-strict-rules": "^2.0.8",
+ "phpunit/phpunit": "^9.6.21",
+ "psr/container": "^2.0.2",
+ "symfony/finder": "^5.4.45",
+ "symfony/process": "^5.4.47"
},
"type": "phpstan-extension",
"extra": {
@@ -2549,54 +2409,67 @@
"authors": [
{
"name": "Andreas Möller",
- "email": "am@localheinz.com"
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Provides additional rules for phpstan/phpstan.",
+ "description": "Provides rules for phpstan/phpstan.",
"homepage": "https://github.com/ergebnis/phpstan-rules",
"keywords": [
"PHPStan",
- "phpstan-extreme-rules",
"phpstan-rules"
],
"support": {
"issues": "https://github.com/ergebnis/phpstan-rules/issues",
+ "security": "https://github.com/ergebnis/phpstan-rules/blob/main/.github/SECURITY.md",
"source": "https://github.com/ergebnis/phpstan-rules"
},
- "funding": [
- {
- "url": "https://github.com/localheinz",
- "type": "github"
- }
- ],
- "time": "2020-10-30T09:50:34+00:00"
+ "time": "2026-01-27T17:13:06+00:00"
},
{
- "name": "facade/ignition-contracts",
- "version": "1.0.2",
+ "name": "ergebnis/phpunit-slow-test-detector",
+ "version": "2.24.0",
"source": {
"type": "git",
- "url": "https://github.com/facade/ignition-contracts.git",
- "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267"
+ "url": "https://github.com/ergebnis/phpunit-slow-test-detector.git",
+ "reference": "e713c1397b09e07892657cdf909731d29481ff4c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
- "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267",
+ "url": "https://api.github.com/repos/ergebnis/phpunit-slow-test-detector/zipball/e713c1397b09e07892657cdf909731d29481ff4c",
+ "reference": "e713c1397b09e07892657cdf909731d29481ff4c",
"shasum": ""
},
"require": {
- "php": "^7.3|^8.0"
+ "php": "~7.0.0 || ~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",
+ "phpunit/phpunit": "^6.5.0 || ^7.5.0 || ^8.5.19 || ^9.0.0 || ^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^v2.15.8",
- "phpunit/phpunit": "^9.3.11",
- "vimeo/psalm": "^3.17.1"
+ "ergebnis/composer-normalize": "^2.50.0",
+ "ergebnis/license": "^2.7.0",
+ "ergebnis/php-cs-fixer-config": "^6.60.1",
+ "fakerphp/faker": "~1.20.0",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^1.12.11",
+ "phpstan/phpstan-deprecation-rules": "^1.2.1",
+ "phpstan/phpstan-phpunit": "^1.4.1",
+ "phpstan/phpstan-strict-rules": "^1.6.1",
+ "psr/container": "~1.0.0",
+ "rector/rector": "^1.2.10"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.16-dev"
+ },
+ "composer-normalize": {
+ "indent-size": 2,
+ "indent-style": "space"
+ }
+ },
"autoload": {
"psr-4": {
- "Facade\\IgnitionContracts\\": "src"
+ "Ergebnis\\PHPUnit\\SlowTestDetector\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2605,162 +2478,204 @@
],
"authors": [
{
- "name": "Freek Van der Herten",
- "email": "freek@spatie.be",
- "homepage": "https://flareapp.io",
- "role": "Developer"
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Solution contracts for Ignition",
- "homepage": "https://github.com/facade/ignition-contracts",
+ "description": "Provides facilities for detecting slow tests in phpunit/phpunit.",
+ "homepage": "https://github.com/ergebnis/phpunit-slow-test-detector",
"keywords": [
- "contracts",
- "flare",
- "ignition"
+ "detector",
+ "extension",
+ "phpunit",
+ "slow",
+ "test"
],
"support": {
- "issues": "https://github.com/facade/ignition-contracts/issues",
- "source": "https://github.com/facade/ignition-contracts/tree/1.0.2"
+ "issues": "https://github.com/ergebnis/phpunit-slow-test-detector/issues",
+ "security": "https://github.com/ergebnis/phpunit-slow-test-detector/blob/main/.github/SECURITY.md",
+ "source": "https://github.com/ergebnis/phpunit-slow-test-detector"
},
- "time": "2020-10-16T08:27:54+00:00"
+ "time": "2026-03-13T10:52:55+00:00"
},
{
- "name": "felixfbecker/advanced-json-rpc",
- "version": "v3.2.1",
+ "name": "fidry/cpu-core-counter",
+ "version": "1.3.0",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
- "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
+ "url": "https://github.com/theofidry/cpu-core-counter.git",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
- "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678",
+ "reference": "db9508f7b1474469d9d3c53b86f817e344732678",
"shasum": ""
},
"require": {
- "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
- "php": "^7.1 || ^8.0",
- "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^7.0 || ^8.0"
+ "fidry/makefile": "^0.2.0",
+ "fidry/php-cs-fixer-config": "^1.1.2",
+ "phpstan/extension-installer": "^1.2.0",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^8.5.31 || ^9.5.26",
+ "webmozarts/strict-phpunit": "^7.5"
},
"type": "library",
"autoload": {
"psr-4": {
- "AdvancedJsonRpc\\": "lib/"
+ "Fidry\\CpuCoreCounter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
+ "MIT"
],
"authors": [
{
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
+ "name": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
}
],
- "description": "A more advanced JSONRPC implementation",
+ "description": "Tiny utility to get the number of CPU cores.",
+ "keywords": [
+ "CPU",
+ "core"
+ ],
"support": {
- "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
- "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
+ "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0"
},
- "time": "2021-06-11T22:34:44+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theofidry",
+ "type": "github"
+ }
+ ],
+ "time": "2025-08-14T07:29:31+00:00"
},
{
- "name": "felixfbecker/language-server-protocol",
- "version": "1.5.1",
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.1.1",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730"
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": "^7.4|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
},
"require-dev": {
- "phpstan/phpstan": "*",
- "squizlabs/php_codesniffer": "^3.1",
- "vimeo/psalm": "^4.0"
+ "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-master": "2.1-dev"
}
},
"autoload": {
- "psr-4": {
- "LanguageServerProtocol\\": "src/"
- }
+ "classmap": [
+ "hamcrest"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
- }
+ "BSD-3-Clause"
],
- "description": "PHP classes for the Language Server Protocol",
+ "description": "This is the PHP port of Hamcrest Matchers",
"keywords": [
- "language",
- "microsoft",
- "php",
- "server"
+ "test"
],
"support": {
- "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
- "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1"
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
},
- "time": "2021-02-22T14:02:09+00:00"
+ "time": "2025-04-30T06:54:44+00:00"
},
{
- "name": "filp/whoops",
- "version": "2.14.5",
+ "name": "icanhazstring/composer-unused",
+ "version": "0.9.6",
"source": {
"type": "git",
- "url": "https://github.com/filp/whoops.git",
- "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc"
+ "url": "https://github.com/composer-unused/composer-unused.git",
+ "reference": "c60030af7954a528746dd2180c10b5e0871e84c7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
- "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc",
+ "url": "https://api.github.com/repos/composer-unused/composer-unused/zipball/c60030af7954a528746dd2180c10b5e0871e84c7",
+ "reference": "c60030af7954a528746dd2180c10b5e0871e84c7",
"shasum": ""
},
"require": {
- "php": "^5.5.9 || ^7.0 || ^8.0",
- "psr/log": "^1.0.1 || ^2.0 || ^3.0"
+ "composer-runtime-api": "^2.0",
+ "composer-unused/contracts": "^0.3",
+ "composer-unused/symbol-parser": "^0.3.1",
+ "composer/xdebug-handler": "^3.0",
+ "ext-json": "*",
+ "nikic/php-parser": "^5.0",
+ "ondram/ci-detector": "^4.1",
+ "php": "^8.1",
+ "phpstan/phpdoc-parser": "^1.25 || ^2",
+ "psr/container": "^1.0 || ^2.0",
+ "psr/log": "^1.1 || ^2 || ^3",
+ "symfony/config": "^6.0 || ^7.0 || ^8.0",
+ "symfony/console": "^6.0 || ^7.0 || ^8.0",
+ "symfony/dependency-injection": "^6.0 || ^7.0 || ^8.0",
+ "symfony/property-access": "^6.0 || ^7.0 || ^8.0",
+ "symfony/serializer": "^6.0 || ^7.0 || ^8.0",
+ "webmozart/assert": "^1.10 || ^2.0",
+ "webmozart/glob": "^4.4"
},
"require-dev": {
- "mockery/mockery": "^0.9 || ^1.0",
- "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.3",
- "symfony/var-dumper": "^2.6 || ^3.0 || ^4.0 || ^5.0"
- },
- "suggest": {
- "symfony/var-dumper": "Pretty print complex values better with var-dumper available",
- "whoops/soap": "Formats errors as SOAP responses"
+ "bamarni/composer-bin-plugin": "^1.8",
+ "codeception/verify": "^3.1",
+ "dg/bypass-finals": "^1.6",
+ "ergebnis/composer-normalize": "^2.49",
+ "ext-ds": "*",
+ "ext-zend-opcache": "*",
+ "jangregor/phpstan-prophecy": "^2.1.1",
+ "mikey179/vfsstream": "^1.6.10",
+ "php-ds/php-ds": "^1.5",
+ "phpspec/prophecy-phpunit": "^2.2.0",
+ "phpstan/extension-installer": "^1.3",
+ "phpstan/phpstan": "^2.1.37",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpunit/phpunit": "^9.6.34",
+ "roave/security-advisories": "dev-master",
+ "squizlabs/php_codesniffer": "^3.13"
},
+ "bin": [
+ "bin/composer-unused"
+ ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "2.7-dev"
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
}
},
"autoload": {
"psr-4": {
- "Whoops\\": "src/Whoops/"
+ "ComposerUnused\\ComposerUnused\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2769,526 +2684,375 @@
],
"authors": [
{
- "name": "Filipe Dobreira",
- "homepage": "https://github.com/filp",
- "role": "Developer"
+ "name": "Andreas Frömer",
+ "email": "composer-unused@icanhazstring.com"
}
],
- "description": "php error handling for cool kids",
- "homepage": "https://filp.github.io/whoops/",
+ "description": "Show unused packages by scanning your code",
+ "homepage": "https://github.com/composer-unused/composer-unused",
"keywords": [
- "error",
- "exception",
- "handling",
- "library",
- "throwable",
- "whoops"
+ "composer",
+ "php-parser",
+ "static analysis",
+ "unused"
],
"support": {
- "issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.14.5"
+ "issues": "https://github.com/composer-unused/composer-unused/issues",
+ "source": "https://github.com/composer-unused/composer-unused"
},
"funding": [
{
- "url": "https://github.com/denis-sokolov",
+ "url": "https://github.com/sponsors/icanhazstring",
"type": "github"
+ },
+ {
+ "url": "https://paypal.me/icanhazstring",
+ "type": "other"
}
],
- "time": "2022-01-07T12:00:00+00:00"
+ "time": "2026-01-30T05:52:24+00:00"
},
{
- "name": "guzzlehttp/guzzle",
- "version": "7.5.0",
+ "name": "infection/abstract-testframework-adapter",
+ "version": "0.5.1",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba"
+ "url": "https://github.com/infection/abstract-testframework-adapter.git",
+ "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba",
- "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba",
+ "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/b24bf3e850f70cd20a10621f08c3cef66f147ac8",
+ "reference": "b24bf3e850f70cd20a10621f08c3cef66f147ac8",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^1.5",
- "guzzlehttp/psr7": "^1.9 || ^2.4",
- "php": "^7.2.5 || ^8.0",
- "psr/http-client": "^1.0",
- "symfony/deprecation-contracts": "^2.2 || ^3.0"
- },
- "provide": {
- "psr/http-client-implementation": "1.0"
+ "php": "^8.3"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "ext-curl": "*",
- "php-http/client-integration-tests": "^3.0",
- "phpunit/phpunit": "^8.5.29 || ^9.5.23",
- "psr/log": "^1.1 || ^2.0 || ^3.0"
- },
- "suggest": {
- "ext-curl": "Required for CURL handler support",
- "ext-intl": "Required for Internationalized Domain Name (IDN) support",
- "psr/log": "Required for using the Log middleware"
+ "ergebnis/composer-normalize": "^2.18",
+ "fidry/makefile": "^1.0",
+ "friendsofphp/php-cs-fixer": "^3.95.2",
+ "phpunit/phpunit": "^12.0 || ^13.0",
+ "rector/rector": "^2.4.5"
},
"type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- },
- "branch-alias": {
- "dev-master": "7.5-dev"
- }
- },
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
- "GuzzleHttp\\": "src/"
+ "Infection\\AbstractTestFramework\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Jeremy Lindblom",
- "email": "jeremeamia@gmail.com",
- "homepage": "https://github.com/jeremeamia"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
+ "name": "Maks Rafalko",
+ "email": "maks.rafalko@gmail.com"
}
],
- "description": "Guzzle is a PHP HTTP client library",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "psr-18",
- "psr-7",
- "rest",
- "web service"
- ],
+ "description": "Abstract Test Framework Adapter for Infection",
"support": {
- "issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.5.0"
+ "issues": "https://github.com/infection/abstract-testframework-adapter/issues",
+ "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.5.1"
},
"funding": [
{
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
+ "url": "https://github.com/infection",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
- "type": "tidelift"
+ "url": "https://opencollective.com/infection",
+ "type": "open_collective"
}
],
- "time": "2022-08-28T15:39:27+00:00"
+ "time": "2026-05-28T19:10:29+00:00"
},
{
- "name": "guzzlehttp/promises",
- "version": "1.5.2",
+ "name": "infection/extension-installer",
+ "version": "0.1.2",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "b94b2807d85443f9719887892882d0329d1e2598"
+ "url": "https://github.com/infection/extension-installer.git",
+ "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598",
- "reference": "b94b2807d85443f9719887892882d0329d1e2598",
+ "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
+ "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
"shasum": ""
},
"require": {
- "php": ">=5.5"
+ "composer-plugin-api": "^1.1 || ^2.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ "composer/composer": "^1.9 || ^2.0",
+ "friendsofphp/php-cs-fixer": "^2.18, <2.19",
+ "infection/infection": "^0.15.2",
+ "php-coveralls/php-coveralls": "^2.4",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^0.12.10",
+ "phpstan/phpstan-phpunit": "^0.12.6",
+ "phpstan/phpstan-strict-rules": "^0.12.2",
+ "phpstan/phpstan-webmozart-assert": "^0.12.2",
+ "phpunit/phpunit": "^9.5",
+ "vimeo/psalm": "^4.8"
},
- "type": "library",
+ "type": "composer-plugin",
"extra": {
- "branch-alias": {
- "dev-master": "1.5-dev"
- }
+ "class": "Infection\\ExtensionInstaller\\Plugin"
},
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
+ "Infection\\ExtensionInstaller\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
+ "name": "Maks Rafalko",
+ "email": "maks.rafalko@gmail.com"
}
],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
+ "description": "Infection Extension Installer",
"support": {
- "issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/1.5.2"
+ "issues": "https://github.com/infection/extension-installer/issues",
+ "source": "https://github.com/infection/extension-installer/tree/0.1.2"
},
"funding": [
{
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
+ "url": "https://github.com/infection",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
- "type": "tidelift"
+ "url": "https://opencollective.com/infection",
+ "type": "open_collective"
}
],
- "time": "2022-08-28T14:55:35+00:00"
+ "time": "2021-10-20T22:08:34+00:00"
},
{
- "name": "guzzlehttp/psr7",
- "version": "2.4.1",
+ "name": "infection/include-interceptor",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379"
+ "url": "https://github.com/infection/include-interceptor.git",
+ "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379",
- "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379",
+ "url": "https://api.github.com/repos/infection/include-interceptor/zipball/c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992",
+ "reference": "c083331bc0cd1cd319ac1b7a08e3ad4a34aa7992",
"shasum": ""
},
- "require": {
- "php": "^7.2.5 || ^8.0",
- "psr/http-factory": "^1.0",
- "psr/http-message": "^1.0",
- "ralouphie/getallheaders": "^3.0"
- },
- "provide": {
- "psr/http-factory-implementation": "1.0",
- "psr/http-message-implementation": "1.0"
- },
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "http-interop/http-factory-tests": "^0.9",
- "phpunit/phpunit": "^8.5.29 || ^9.5.23"
- },
- "suggest": {
- "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ "friendsofphp/php-cs-fixer": "^2.16",
+ "infection/infection": "^0.19.0",
+ "phan/phan": "^2.4 || ^3",
+ "php-coveralls/php-coveralls": "^2.2",
+ "phpstan/phpstan": "^0.12.8",
+ "phpunit/phpunit": "^8.5",
+ "vimeo/psalm": "^3.8"
},
"type": "library",
- "extra": {
- "bamarni-bin": {
- "bin-links": true,
- "forward-command": false
- },
- "branch-alias": {
- "dev-master": "2.4-dev"
- }
- },
"autoload": {
"psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
+ "Infection\\StreamWrapper\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Graham Campbell",
- "email": "hello@gjcampbell.co.uk",
- "homepage": "https://github.com/GrahamCampbell"
- },
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "George Mponos",
- "email": "gmponos@gmail.com",
- "homepage": "https://github.com/gmponos"
- },
- {
- "name": "Tobias Nyholm",
- "email": "tobias.nyholm@gmail.com",
- "homepage": "https://github.com/Nyholm"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://github.com/sagikazarmark"
- },
- {
- "name": "Tobias Schultze",
- "email": "webmaster@tubo-world.de",
- "homepage": "https://github.com/Tobion"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
+ "name": "Maks Rafalko",
+ "email": "maks.rafalko@gmail.com"
}
],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "psr-7",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
+ "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.",
"support": {
- "issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.4.1"
+ "issues": "https://github.com/infection/include-interceptor/issues",
+ "source": "https://github.com/infection/include-interceptor/tree/1.0.0"
},
"funding": [
{
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
+ "url": "https://github.com/infection",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
- "type": "tidelift"
+ "url": "https://opencollective.com/infection",
+ "type": "open_collective"
}
],
- "time": "2022-08-28T14:45:39+00:00"
+ "time": "2024-05-03T21:48:06+00:00"
},
{
- "name": "icanhazstring/composer-unused",
- "version": "0.7.10",
+ "name": "infection/infection",
+ "version": "0.33.3",
"source": {
"type": "git",
- "url": "https://github.com/composer-unused/composer-unused.git",
- "reference": "97086da19c7434a42427df0cf47b21278609ffb8"
+ "url": "https://github.com/infection/infection.git",
+ "reference": "cc789bb58df7c649c4533ab860d98283fe270215"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer-unused/composer-unused/zipball/97086da19c7434a42427df0cf47b21278609ffb8",
- "reference": "97086da19c7434a42427df0cf47b21278609ffb8",
+ "url": "https://api.github.com/repos/infection/infection/zipball/cc789bb58df7c649c4533ab860d98283fe270215",
+ "reference": "cc789bb58df7c649c4533ab860d98283fe270215",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^2.0",
+ "colinodell/json5": "^3.0",
+ "composer-runtime-api": "^2.0",
+ "composer/xdebug-handler": "^3.0",
+ "ext-dom": "*",
"ext-json": "*",
- "nikic/php-parser": "^4.13",
- "php": ">=7.3 || ^8.0",
- "psr/container": "^1.0 || ^2.0",
- "psr/log": "^1.1 || ^2 || ^3",
- "symfony/finder": "^4.2 || ^5.0"
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "fidry/cpu-core-counter": "^1.0",
+ "infection/abstract-testframework-adapter": "^0.5.0",
+ "infection/extension-installer": "^0.1.0",
+ "infection/include-interceptor": "^0.2.5 || ^1.0.0",
+ "infection/mutator": "^0.4",
+ "justinrainbow/json-schema": "^6.0",
+ "nikic/php-parser": "^5.6.2",
+ "ondram/ci-detector": "^4.1.0",
+ "php": "^8.3",
+ "psr/log": "^2.0 || ^3.0",
+ "sanmai/di-container": "^0.1.16",
+ "sanmai/duoclock": "^0.1.0",
+ "sanmai/later": "^0.1.7",
+ "sanmai/pipeline": "^7.2",
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/console": "^6.4 || ^7.4 || ^8.0",
+ "symfony/filesystem": "^6.4 || ^7.4 || ^8.0",
+ "symfony/finder": "^6.4 || ^7.4 || ^8.0",
+ "symfony/polyfill-php85": "^1.33",
+ "symfony/process": "^6.4 || ^7.4 || ^8.0",
+ "thecodingmachine/safe": "^v3.0",
+ "webmozart/assert": "^1.11 || ^2.0"
+ },
+ "conflict": {
+ "antecedent/patchwork": "<2.1.25",
+ "dg/bypass-finals": "<1.4.1"
},
"require-dev": {
- "composer/composer": "^2.1",
- "ext-ds": "*",
- "ext-zend-opcache": "*",
- "jangregor/phpstan-prophecy": "^0.8.1",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/phpstan": "^0.12.99",
- "phpunit/phpunit": "^9.5.10",
- "roave/security-advisories": "dev-master",
- "squizlabs/php_codesniffer": "^3.6"
+ "carthage-software/mago": "^1.20",
+ "ext-simplexml": "*",
+ "fidry/makefile": "^1.0",
+ "fig/log-test": "^1.2",
+ "phpat/phpat": "^0.12.4",
+ "phpbench/phpbench": "^1.4",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2.1",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpstan/phpstan-webmozart-assert": "^2.0",
+ "phpunit/phpunit": "^11.5.27",
+ "rector/rector": "^2.2.4",
+ "shipmonk/dead-code-detector": "^0.15",
+ "shipmonk/name-collision-detector": "^2.1",
+ "sidz/phpstan-rules": "^0.5.1",
+ "symfony/yaml": "^6.4 || ^7.4 || ^8.0",
+ "thecodingmachine/phpstan-safe-rule": "^1.4",
+ "webmozarts/strict-phpunit": "^7.15"
},
"bin": [
- "bin/composer-unused"
+ "bin/infection"
],
- "type": "composer-plugin",
- "extra": {
- "class": "Icanhazstring\\Composer\\Unused\\UnusedPlugin"
- },
+ "type": "library",
"autoload": {
"psr-4": {
- "Icanhazstring\\Composer\\Unused\\": "src"
+ "Infection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Andreas Frömer",
- "email": "blubb0r05+github@gmail.com"
+ "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"
+ },
+ {
+ "name": "Andreas Möller",
+ "email": "am@localheinz.com",
+ "homepage": "https://localheinz.com"
}
],
- "description": "Show unused packages by scanning your code",
- "homepage": "https://github.com/composer-unused/composer-unused",
+ "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": [
- "composer",
- "php-parser",
- "plugin",
- "unused"
+ "coverage",
+ "mutant",
+ "mutation framework",
+ "mutation testing",
+ "testing",
+ "unit testing"
],
"support": {
- "issues": "https://github.com/composer-unused/composer-unused/issues",
- "source": "https://github.com/composer-unused/composer-unused"
+ "issues": "https://github.com/infection/infection/issues",
+ "source": "https://github.com/infection/infection/tree/0.33.3"
},
"funding": [
{
- "url": "https://github.com/sponsors/icanhazstring",
+ "url": "https://github.com/infection",
"type": "github"
},
{
- "url": "https://paypal.me/icanhazstring",
- "type": "other"
+ "url": "https://opencollective.com/infection",
+ "type": "open_collective"
}
],
- "time": "2021-12-16T21:59:44+00:00"
+ "time": "2026-06-18T07:45:54+00:00"
},
{
- "name": "infection/abstract-testframework-adapter",
- "version": "0.3.1",
+ "name": "infection/mutator",
+ "version": "0.4.1",
"source": {
"type": "git",
- "url": "https://github.com/infection/abstract-testframework-adapter.git",
- "reference": "c52539339f28d6b67625ff24496289b3e6d66025"
+ "url": "https://github.com/infection/mutator.git",
+ "reference": "3c976d721b02b32f851ee4e15d553ef1e9186d1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/infection/abstract-testframework-adapter/zipball/c52539339f28d6b67625ff24496289b3e6d66025",
- "reference": "c52539339f28d6b67625ff24496289b3e6d66025",
+ "url": "https://api.github.com/repos/infection/mutator/zipball/3c976d721b02b32f851ee4e15d553ef1e9186d1d",
+ "reference": "3c976d721b02b32f851ee4e15d553ef1e9186d1d",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8.0"
+ "nikic/php-parser": "^5.0"
},
"require-dev": {
- "ergebnis/composer-normalize": "^2.8",
- "friendsofphp/php-cs-fixer": "^2.16",
- "phpunit/phpunit": "^9.0"
+ "phpunit/phpunit": "^9.6 || ^10"
},
"type": "library",
"autoload": {
"psr-4": {
- "Infection\\AbstractTestFramework\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Maks Rafalko",
- "email": "maks.rafalko@gmail.com"
- }
- ],
- "description": "Abstract Test Framework Adapter for Infection",
- "support": {
- "issues": "https://github.com/infection/abstract-testframework-adapter/issues",
- "source": "https://github.com/infection/abstract-testframework-adapter/tree/0.3"
- },
- "time": "2020-08-30T13:50:12+00:00"
- },
- {
- "name": "infection/extension-installer",
- "version": "0.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/infection/extension-installer.git",
- "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/infection/extension-installer/zipball/9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
- "reference": "9b351d2910b9a23ab4815542e93d541e0ca0cdcf",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.1 || ^2.0"
- },
- "require-dev": {
- "composer/composer": "^1.9 || ^2.0",
- "friendsofphp/php-cs-fixer": "^2.18, <2.19",
- "infection/infection": "^0.15.2",
- "php-coveralls/php-coveralls": "^2.4",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12.10",
- "phpstan/phpstan-phpunit": "^0.12.6",
- "phpstan/phpstan-strict-rules": "^0.12.2",
- "phpstan/phpstan-webmozart-assert": "^0.12.2",
- "phpunit/phpunit": "^9.5",
- "vimeo/psalm": "^4.8"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "Infection\\ExtensionInstaller\\Plugin"
- },
- "autoload": {
- "psr-4": {
- "Infection\\ExtensionInstaller\\": "src/"
+ "Infection\\Mutator\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -3301,10 +3065,10 @@
"email": "maks.rafalko@gmail.com"
}
],
- "description": "Infection Extension Installer",
+ "description": "Mutator interface to implement custom mutators (mutation operators) for Infection",
"support": {
- "issues": "https://github.com/infection/extension-installer/issues",
- "source": "https://github.com/infection/extension-installer/tree/0.1.2"
+ "issues": "https://github.com/infection/mutator/issues",
+ "source": "https://github.com/infection/mutator/tree/0.4.1"
},
"funding": [
{
@@ -3316,356 +3080,78 @@
"type": "open_collective"
}
],
- "time": "2021-10-20T22:08:34+00:00"
+ "time": "2025-04-29T08:19:52+00:00"
},
{
- "name": "infection/include-interceptor",
- "version": "0.2.5",
+ "name": "jetbrains/phpstorm-stubs",
+ "version": "v2026.1",
"source": {
"type": "git",
- "url": "https://github.com/infection/include-interceptor.git",
- "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7"
+ "url": "https://github.com/JetBrains/phpstorm-stubs",
+ "reference": "2cdd054c4109dfb76667c9198bf9427606354243"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/infection/include-interceptor/zipball/0cc76d95a79d9832d74e74492b0a30139904bdf7",
- "reference": "0cc76d95a79d9832d74e74492b0a30139904bdf7",
+ "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/2cdd054c4109dfb76667c9198bf9427606354243",
+ "reference": "2cdd054c4109dfb76667c9198bf9427606354243",
"shasum": ""
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.16",
- "infection/infection": "^0.15.0",
- "phan/phan": "^2.4 || ^3",
- "php-coveralls/php-coveralls": "^2.2",
- "phpstan/phpstan": "^0.12.8",
- "phpunit/phpunit": "^8.5",
- "vimeo/psalm": "^3.8"
+ "friendsofphp/php-cs-fixer": "^v3.86",
+ "nikic/php-parser": "^v5.6",
+ "phpdocumentor/reflection-docblock": "^5.6",
+ "phpunit/phpunit": "^12.3"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Infection\\StreamWrapper\\": "src/"
- }
+ "files": [
+ "PhpStormStubsMap.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Maks Rafalko",
- "email": "maks.rafalko@gmail.com"
- }
+ "Apache-2.0"
],
- "description": "Stream Wrapper: Include Interceptor. Allows to replace included (autoloaded) file with another one.",
- "support": {
- "issues": "https://github.com/infection/include-interceptor/issues",
- "source": "https://github.com/infection/include-interceptor/tree/0.2.5"
- },
- "funding": [
- {
- "url": "https://github.com/infection",
- "type": "github"
- },
- {
- "url": "https://opencollective.com/infection",
- "type": "open_collective"
- }
+ "description": "PHP runtime & extensions header files for PhpStorm",
+ "homepage": "https://www.jetbrains.com/phpstorm",
+ "keywords": [
+ "autocomplete",
+ "code",
+ "inference",
+ "inspection",
+ "jetbrains",
+ "phpstorm",
+ "stubs",
+ "type"
],
- "time": "2021-08-09T10:03:57+00:00"
+ "time": "2026-02-19T20:12:01+00:00"
},
{
- "name": "infection/infection",
- "version": "0.20.2",
+ "name": "justinrainbow/json-schema",
+ "version": "6.10.0",
"source": {
"type": "git",
- "url": "https://github.com/infection/infection.git",
- "reference": "6035c1566af6a5a8d833a276351e5e18ed412305"
+ "url": "https://github.com/jsonrainbow/json-schema.git",
+ "reference": "8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/infection/infection/zipball/6035c1566af6a5a8d833a276351e5e18ed412305",
- "reference": "6035c1566af6a5a8d833a276351e5e18ed412305",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33",
+ "reference": "8b1308a9d7bdbdb20ce87ef920f82b4564bb2d33",
"shasum": ""
},
"require": {
- "composer/xdebug-handler": "^1.3.3",
- "ext-dom": "*",
"ext-json": "*",
- "ext-libxml": "*",
- "infection/abstract-testframework-adapter": "^0.3.1",
- "infection/extension-installer": "^0.1.0",
- "infection/include-interceptor": "^0.2.4",
- "justinrainbow/json-schema": "^5.2",
- "nikic/php-parser": "^4.10.2",
- "ocramius/package-versions": "^1.2 || ^2.0",
- "ondram/ci-detector": "^3.3.0",
- "php": "^7.4 || ^8.0",
- "sanmai/pipeline": "^3.1 || ^5.0",
- "sebastian/diff": "^3.0.2 || ^4.0",
- "seld/jsonlint": "^1.7",
- "symfony/console": "^3.4.29 || ^4.1.19 || ^5.0",
- "symfony/filesystem": "^3.4.29 || ^4.1.19 || ^5.0",
- "symfony/finder": "^3.4.29 || ^4.1.19 || ^5.0",
- "symfony/process": "^3.4.29 || ^4.1.19 || ^5.0",
- "thecodingmachine/safe": "^1.0",
- "webmozart/assert": "^1.3",
- "webmozart/path-util": "^2.3"
- },
- "conflict": {
- "phpunit/php-code-coverage": ">9 <9.1.4",
- "symfony/console": "=4.1.5"
- },
- "require-dev": {
- "ext-simplexml": "*",
- "helmich/phpunit-json-assert": "^3.0",
- "phpspec/prophecy-phpunit": "^2.0",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^0.12.8",
- "phpstan/phpstan-phpunit": "^0.12.6",
- "phpstan/phpstan-strict-rules": "^0.12.5",
- "phpstan/phpstan-webmozart-assert": "^0.12.2",
- "phpunit/phpunit": "^9.3.11",
- "symfony/phpunit-bridge": "^4.4.14 || ^5.1.6",
- "symfony/yaml": "^5.0",
- "thecodingmachine/phpstan-safe-rule": "^1.0",
- "vimeo/psalm": "^4.0"
- },
- "bin": [
- "bin/infection"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Infection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "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"
- },
- {
- "name": "Andreas Möller",
- "email": "am@localheinz.com",
- "homepage": "https://localheinz.com"
- }
- ],
- "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"
- ],
- "support": {
- "issues": "https://github.com/infection/infection/issues",
- "source": "https://github.com/infection/infection/tree/0.20.2"
- },
- "time": "2020-11-20T17:15:57+00:00"
- },
- {
- "name": "jakobbuis/simple-slow-test-reporter",
- "version": "v1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/jakobbuis/simple-slow-test-reporter.git",
- "reference": "7111cb24f4670ca455f5578710022311f78ef1c4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/jakobbuis/simple-slow-test-reporter/zipball/7111cb24f4670ca455f5578710022311f78ef1c4",
- "reference": "7111cb24f4670ca455f5578710022311f78ef1c4",
- "shasum": ""
- },
- "require": {
- "phpunit/phpunit": "^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "SSTR\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jakob Buis",
- "email": "jakob@jakobbuis.nl"
- }
- ],
- "description": "Reports slow tests in your PHPUnit testsuite",
- "support": {
- "issues": "https://github.com/jakobbuis/simple-slow-test-reporter/issues",
- "source": "https://github.com/jakobbuis/simple-slow-test-reporter/tree/v1.0.0"
- },
- "time": "2020-12-26T16:20:53+00:00"
- },
- {
- "name": "jangregor/phpstan-prophecy",
- "version": "0.8.1",
- "source": {
- "type": "git",
- "url": "https://github.com/Jan0707/phpstan-prophecy.git",
- "reference": "f01ca476840c370bbf9c224aed25fca60eecca9d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/Jan0707/phpstan-prophecy/zipball/f01ca476840c370bbf9c224aed25fca60eecca9d",
- "reference": "f01ca476840c370bbf9c224aed25fca60eecca9d",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.12.6"
- },
- "conflict": {
- "phpspec/prophecy": "<1.7.0,>=2.0.0",
- "phpunit/phpunit": "<6.0.0,>=10.0.0"
- },
- "require-dev": {
- "ergebnis/composer-normalize": "^2.1.1",
- "ergebnis/license": "^1.0.0",
- "ergebnis/php-cs-fixer-config": "~2.2.0",
- "phpspec/prophecy": "^1.7.0",
- "phpunit/phpunit": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
- },
- "type": "phpstan-extension",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "JanGregor\\Prophecy\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jan Gregor Emge-Triebel",
- "email": "jan@jangregor.me"
- }
- ],
- "description": "Provides a phpstan/phpstan extension for phpspec/prophecy",
- "support": {
- "issues": "https://github.com/Jan0707/phpstan-prophecy/issues",
- "source": "https://github.com/Jan0707/phpstan-prophecy/tree/0.8.1"
- },
- "funding": [
- {
- "url": "https://www.buymeacoffee.com/localheinz",
- "type": "custom"
- },
- {
- "url": "https://github.com/localheinz",
- "type": "github"
- }
- ],
- "time": "2020-10-24T15:04:14+00:00"
- },
- {
- "name": "jetbrains/phpstorm-stubs",
- "version": "v2019.3",
- "source": {
- "type": "git",
- "url": "https://github.com/JetBrains/phpstorm-stubs.git",
- "reference": "883b6facd78e01c0743b554af86fa590c2573f40"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/JetBrains/phpstorm-stubs/zipball/883b6facd78e01c0743b554af86fa590c2573f40",
- "reference": "883b6facd78e01c0743b554af86fa590c2573f40",
- "shasum": ""
- },
- "require-dev": {
- "nikic/php-parser": "^4",
- "php": "^7.1",
- "phpdocumentor/reflection-docblock": "^4.3",
- "phpunit/phpunit": "^7"
- },
- "type": "library",
- "autoload": {
- "files": [
- "PhpStormStubsMap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "description": "PHP runtime & extensions header files for PhpStorm",
- "homepage": "https://www.jetbrains.com/phpstorm",
- "keywords": [
- "autocomplete",
- "code",
- "inference",
- "inspection",
- "jetbrains",
- "phpstorm",
- "stubs",
- "type"
- ],
- "support": {
- "source": "https://github.com/JetBrains/phpstorm-stubs/tree/master"
- },
- "time": "2019-12-05T16:56:26+00:00"
- },
- {
- "name": "justinrainbow/json-schema",
- "version": "5.2.12",
- "source": {
- "type": "git",
- "url": "https://github.com/justinrainbow/json-schema.git",
- "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
- "reference": "ad87d5a5ca981228e0e205c2bc7dfb8e24559b60",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
+ "marc-mabe/php-enum": "^4.4",
+ "php": "^7.2 || ^8.0"
},
"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"
+ "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"
@@ -3673,7 +3159,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0.x-dev"
+ "dev-master": "6.x-dev"
}
},
"autoload": {
@@ -3704,36 +3190,36 @@
}
],
"description": "A library to validate a json schema.",
- "homepage": "https://github.com/justinrainbow/json-schema",
+ "homepage": "https://github.com/jsonrainbow/json-schema",
"keywords": [
"json",
"schema"
],
"support": {
- "issues": "https://github.com/justinrainbow/json-schema/issues",
- "source": "https://github.com/justinrainbow/json-schema/tree/5.2.12"
+ "issues": "https://github.com/jsonrainbow/json-schema/issues",
+ "source": "https://github.com/jsonrainbow/json-schema/tree/6.10.0"
},
- "time": "2022-04-13T08:02:27+00:00"
+ "time": "2026-06-16T20:50:26+00:00"
},
{
"name": "localheinz/diff",
- "version": "1.1.1",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/localheinz/diff.git",
- "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c"
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/localheinz/diff/zipball/851bb20ea8358c86f677f5f111c4ab031b1c764c",
- "reference": "851bb20ea8358c86f677f5f111c4ab031b1c764c",
+ "url": "https://api.github.com/repos/localheinz/diff/zipball/33bd840935970cda6691c23fc7d94ae764c0734c",
+ "reference": "33bd840935970cda6691c23fc7d94ae764c0734c",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.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": "^7.5 || ^8.0",
+ "phpunit/phpunit": "^7.5.0 || ^8.5.23",
"symfony/process": "^4.2 || ^5"
},
"type": "library",
@@ -3765,48 +3251,49 @@
"unified diff"
],
"support": {
- "source": "https://github.com/localheinz/diff/tree/main"
+ "issues": "https://github.com/localheinz/diff/issues",
+ "source": "https://github.com/localheinz/diff/tree/1.3.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-07-06T04:49:32+00:00"
+ "time": "2025-08-30T09:44:18+00:00"
},
{
"name": "maglnet/composer-require-checker",
- "version": "3.8.0",
+ "version": "4.20.0",
"source": {
"type": "git",
"url": "https://github.com/maglnet/ComposerRequireChecker.git",
- "reference": "537138b833ab0f9ad72b667a72bece2a765e88ab"
+ "reference": "c62d517ef5ac2d347dd9b3d02c1cc16c0f1091e2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/537138b833ab0f9ad72b667a72bece2a765e88ab",
- "reference": "537138b833ab0f9ad72b667a72bece2a765e88ab",
+ "url": "https://api.github.com/repos/maglnet/ComposerRequireChecker/zipball/c62d517ef5ac2d347dd9b3d02c1cc16c0f1091e2",
+ "reference": "c62d517ef5ac2d347dd9b3d02c1cc16c0f1091e2",
"shasum": ""
},
"require": {
+ "azjezz/psl": "^4.2.0",
"composer-runtime-api": "^2.0.0",
- "ext-json": "*",
"ext-phar": "*",
- "nikic/php-parser": "^4.13.0",
- "php": "^7.4 || ^8.0",
- "symfony/console": "^5.4.0",
- "webmozart/assert": "^1.9.1",
- "webmozart/glob": "^4.4.0"
+ "nikic/php-parser": "^5.7.0",
+ "php": "~8.3.0 || ~8.4.0 || ~8.5.0",
+ "symfony/console": "^7.4.1",
+ "webmozart/glob": "^4.7.0"
+ },
+ "conflict": {
+ "revolt/event-loop": "< 1.0.8"
},
"require-dev": {
- "doctrine/coding-standard": "^9.0.0",
+ "doctrine/coding-standard": "^14.0.0",
"ext-zend-opcache": "*",
- "mikey179/vfsstream": "^1.6.10",
- "phing/phing": "^2.17.0",
- "phpstan/phpstan": "^1.2.0",
- "phpunit/phpunit": "^9.5.10",
- "vimeo/psalm": "^4.14.0"
+ "phing/phing": "^3.1.1",
+ "php-standard-library/phpstan-extension": "^2.0.2",
+ "php-standard-library/psalm-plugin": "^2.3",
+ "phpstan/phpstan": "^2.1.33",
+ "phpunit/phpunit": "^12.5.4",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "roave/infection-static-analysis-plugin": "^1.42.0",
+ "spatie/temporary-directory": "^2.3.0",
+ "vimeo/psalm": "^6.14.3"
},
"bin": [
"bin/composer-require-checker"
@@ -3841,147 +3328,259 @@
"description": "CLI tool to analyze composer dependencies and verify that no unknown symbols are used in the sources of a package",
"homepage": "https://github.com/maglnet/ComposerRequireChecker",
"keywords": [
- "analysis",
"cli",
"composer",
"dependency",
"imports",
"require",
- "requirements"
+ "requirements",
+ "static analysis"
],
"support": {
"issues": "https://github.com/maglnet/ComposerRequireChecker/issues",
- "source": "https://github.com/maglnet/ComposerRequireChecker/tree/3.8.0"
+ "source": "https://github.com/maglnet/ComposerRequireChecker/tree/4.20.0"
},
- "time": "2021-12-07T14:25:47+00:00"
+ "time": "2025-12-29T11:34:42+00:00"
},
{
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
+ "name": "marc-mabe/php-enum",
+ "version": "v4.7.2",
"source": {
"type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+ "url": "https://github.com/marc-mabe/php-enum.git",
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "url": "https://api.github.com/repos/marc-mabe/php-enum/zipball/bb426fcdd65c60fb3638ef741e8782508fda7eef",
+ "reference": "bb426fcdd65c60fb3638ef741e8782508fda7eef",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "ext-reflection": "*",
+ "php": "^7.1 | ^8.0"
},
"require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.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": {
- "files": [
- "src/DeepCopy/deep_copy.php"
- ],
"psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- }
+ "MabeEnum\\": "src/"
+ },
+ "classmap": [
+ "stubs/Stringable.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
- "description": "Create deep copies (clones) of your objects",
+ "authors": [
+ {
+ "name": "Marc Bennewitz",
+ "email": "dev@mabe.berlin",
+ "homepage": "https://mabe.berlin/",
+ "role": "Lead"
+ }
+ ],
+ "description": "Simple and fast implementation of enumerations with native PHP",
+ "homepage": "https://github.com/marc-mabe/php-enum",
"keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
+ "enum",
+ "enum-map",
+ "enum-set",
+ "enumeration",
+ "enumerator",
+ "enummap",
+ "enumset",
+ "map",
+ "set",
+ "type",
+ "type-hint",
+ "typehint"
],
"support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+ "issues": "https://github.com/marc-mabe/php-enum/issues",
+ "source": "https://github.com/marc-mabe/php-enum/tree/v4.7.2"
},
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
+ "time": "2025-09-14T11:18:39+00:00"
},
{
- "name": "netresearch/jsonmapper",
- "version": "v4.0.0",
+ "name": "mockery/mockery",
+ "version": "1.6.12",
"source": {
"type": "git",
- "url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d"
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
- "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=7.1"
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=7.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
},
"require-dev": {
- "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0",
- "squizlabs/php_codesniffer": "~3.5"
+ "phpunit/phpunit": "^8.5 || ^9.6.17",
+ "symplify/easy-coding-standard": "^12.1.14"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JsonMapper": "src/"
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
}
},
"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/",
+ "name": "Pádraic Brady",
+ "email": "padraic.brady@gmail.com",
+ "homepage": "https://github.com/padraic",
+ "role": "Author"
+ },
+ {
+ "name": "Dave Marshall",
+ "email": "dave.marshall@atstsolutions.co.uk",
+ "homepage": "https://davedevelopment.co.uk",
"role": "Developer"
+ },
+ {
+ "name": "Nathanael Esayeas",
+ "email": "nathanael.esayeas@protonmail.com",
+ "homepage": "https://github.com/ghostwriter",
+ "role": "Lead Developer"
}
],
- "description": "Map nested JSON structures onto PHP classes",
- "support": {
- "email": "cweiske@cweiske.de",
- "issues": "https://github.com/cweiske/jsonmapper/issues",
- "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0"
+ "description": "Mockery is a simple yet flexible PHP mock object framework",
+ "homepage": "https://github.com/mockery/mockery",
+ "keywords": [
+ "BDD",
+ "TDD",
+ "library",
+ "mock",
+ "mock objects",
+ "mockery",
+ "stub",
+ "test",
+ "test double",
+ "testing"
+ ],
+ "support": {
+ "docs": "https://docs.mockery.io/",
+ "issues": "https://github.com/mockery/mockery/issues",
+ "rss": "https://github.com/mockery/mockery/releases.atom",
+ "security": "https://github.com/mockery/mockery/security/advisories",
+ "source": "https://github.com/mockery/mockery"
+ },
+ "time": "2024-05-16T03:13:13+00:00"
+ },
+ {
+ "name": "myclabs/deep-copy",
+ "version": "1.13.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+ },
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpspec/prophecy": "^1.10",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/DeepCopy/deep_copy.php"
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Create deep copies (clones) of your objects",
+ "keywords": [
+ "clone",
+ "copy",
+ "duplicate",
+ "object",
+ "object graph"
+ ],
+ "support": {
+ "issues": "https://github.com/myclabs/DeepCopy/issues",
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
- "time": "2020-12-01T19:48:11+00:00"
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.13.2",
+ "version": "v5.7.0",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077"
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
- "reference": "210577fe3cf7badcc5814d99455df46564f3c077",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82",
+ "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82",
"shasum": ""
},
"require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
"ext-tokenizer": "*",
- "php": ">=7.0"
+ "php": ">=7.4"
},
"require-dev": {
"ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
+ "phpunit/phpunit": "^9.0"
},
"bin": [
"bin/php-parse"
@@ -3989,7 +3588,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.9-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -4013,39 +3612,39 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0"
},
- "time": "2021-11-30T19:35:32+00:00"
+ "time": "2025-12-06T11:56:16+00:00"
},
{
"name": "nikolaposa/version",
- "version": "4.1.0",
+ "version": "4.2.1",
"source": {
"type": "git",
"url": "https://github.com/nikolaposa/version.git",
- "reference": "0aada6b801962c084ae465f7569397dc2186b6a7"
+ "reference": "2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikolaposa/version/zipball/0aada6b801962c084ae465f7569397dc2186b6a7",
- "reference": "0aada6b801962c084ae465f7569397dc2186b6a7",
+ "url": "https://api.github.com/repos/nikolaposa/version/zipball/2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428",
+ "reference": "2b9ee2f0b09333b6ce00bd6b63132cdf1d7a1428",
"shasum": ""
},
"require": {
"beberlei/assert": "^3.2",
- "php": "^7.2 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.17",
- "phpstan/phpstan": "^0.12.10",
- "phpstan/phpstan-beberlei-assert": "^0.12.2",
- "phpstan/phpstan-phpunit": "^0.12.6",
- "phpunit/phpunit": "^8.0"
+ "friendsofphp/php-cs-fixer": "^3.44",
+ "phpstan/phpstan": "^1.10",
+ "phpstan/phpstan-beberlei-assert": "^1.1",
+ "phpstan/phpstan-phpunit": "^1.3",
+ "phpunit/phpunit": "^10.5"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0.x-dev"
+ "dev-master": "4.2.x-dev"
}
},
"autoload": {
@@ -4074,52 +3673,44 @@
],
"support": {
"issues": "https://github.com/nikolaposa/version/issues",
- "source": "https://github.com/nikolaposa/version/tree/4.1.0"
+ "source": "https://github.com/nikolaposa/version/tree/4.2.1"
},
- "time": "2020-12-12T10:47:10+00:00"
+ "time": "2025-03-24T19:12:02+00:00"
},
{
- "name": "nunomaduro/collision",
- "version": "v5.11.0",
+ "name": "ocramius/package-versions",
+ "version": "2.12.0",
"source": {
"type": "git",
- "url": "https://github.com/nunomaduro/collision.git",
- "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461"
+ "url": "https://github.com/Ocramius/PackageVersions.git",
+ "reference": "18b02a63e837246e812cae72e211db32d7980019"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/8b610eef8582ccdc05d8f2ab23305e2d37049461",
- "reference": "8b610eef8582ccdc05d8f2ab23305e2d37049461",
+ "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/18b02a63e837246e812cae72e211db32d7980019",
+ "reference": "18b02a63e837246e812cae72e211db32d7980019",
"shasum": ""
},
"require": {
- "facade/ignition-contracts": "^1.0",
- "filp/whoops": "^2.14.3",
- "php": "^7.3 || ^8.0",
- "symfony/console": "^5.0"
+ "composer-runtime-api": "^2.2.0",
+ "php": "~8.4.0 || ~8.5.0"
+ },
+ "replace": {
+ "composer/package-versions-deprecated": "*"
},
"require-dev": {
- "brianium/paratest": "^6.1",
- "fideloper/proxy": "^4.4.1",
- "fruitcake/laravel-cors": "^2.0.3",
- "laravel/framework": "8.x-dev",
- "nunomaduro/larastan": "^0.6.2",
- "nunomaduro/mock-final-classes": "^1.0",
- "orchestra/testbench": "^6.0",
- "phpstan/phpstan": "^0.12.64",
- "phpunit/phpunit": "^9.5.0"
+ "composer/composer": "^2.9.8",
+ "doctrine/coding-standard": "^14.0.0",
+ "ext-zip": "^1.15.0",
+ "phpunit/phpunit": "^13.1.11",
+ "psalm/plugin-phpunit": "^0.19.7",
+ "roave/infection-static-analysis-plugin": "^1.44.0",
+ "vimeo/psalm": "^6.16.1"
},
"type": "library",
- "extra": {
- "laravel": {
- "providers": [
- "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider"
- ]
- }
- },
"autoload": {
"psr-4": {
- "NunoMaduro\\Collision\\": "src/"
+ "PackageVersions\\": "src/PackageVersions"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4128,68 +3719,52 @@
],
"authors": [
{
- "name": "Nuno Maduro",
- "email": "enunomaduro@gmail.com"
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
}
],
- "description": "Cli error handling for console/command-line PHP applications.",
- "keywords": [
- "artisan",
- "cli",
- "command-line",
- "console",
- "error",
- "handling",
- "laravel",
- "laravel-zero",
- "php",
- "symfony"
- ],
+ "description": "Provides efficient querying for installed package versions (no runtime IO)",
"support": {
- "issues": "https://github.com/nunomaduro/collision/issues",
- "source": "https://github.com/nunomaduro/collision"
+ "issues": "https://github.com/Ocramius/PackageVersions/issues",
+ "source": "https://github.com/Ocramius/PackageVersions/tree/2.12.0"
},
"funding": [
{
- "url": "https://www.paypal.com/paypalme/enunomaduro",
- "type": "custom"
- },
- {
- "url": "https://github.com/nunomaduro",
+ "url": "https://github.com/Ocramius",
"type": "github"
},
{
- "url": "https://www.patreon.com/nunomaduro",
- "type": "patreon"
+ "url": "https://tidelift.com/funding/github/packagist/ocramius/package-versions",
+ "type": "tidelift"
}
],
- "time": "2022-01-10T16:22:52+00:00"
+ "time": "2026-05-21T19:52:53+00:00"
},
{
"name": "ondram/ci-detector",
- "version": "3.5.1",
+ "version": "4.2.0",
"source": {
"type": "git",
"url": "https://github.com/OndraM/ci-detector.git",
- "reference": "594e61252843b68998bddd48078c5058fe9028bd"
+ "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/594e61252843b68998bddd48078c5058fe9028bd",
- "reference": "594e61252843b68998bddd48078c5058fe9028bd",
+ "url": "https://api.github.com/repos/OndraM/ci-detector/zipball/8b0223b5ed235fd377c75fdd1bfcad05c0f168b8",
+ "reference": "8b0223b5ed235fd377c75fdd1bfcad05c0f168b8",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "ergebnis/composer-normalize": "^2.2",
- "lmc/coding-standard": "^1.3 || ^2.0",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpstan/extension-installer": "^1.0.3",
- "phpstan/phpstan": "^0.12.0",
- "phpstan/phpstan-phpunit": "^0.12.1",
- "phpunit/phpunit": "^7.1 || ^8.0 || ^9.0"
+ "ergebnis/composer-normalize": "^2.13.2",
+ "lmc/coding-standard": "^3.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.1.0",
+ "phpstan/phpstan": "^1.2.0",
+ "phpstan/phpstan-phpunit": "^1.0.0",
+ "phpunit/phpunit": "^9.6.13"
},
"type": "library",
"autoload": {
@@ -4216,6 +3791,9 @@
"appveyor",
"aws",
"aws codebuild",
+ "azure",
+ "azure devops",
+ "azure pipelines",
"bamboo",
"bitbucket",
"buddy",
@@ -4223,200 +3801,40 @@
"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/main"
- },
- "time": "2020-09-04T11:21:14+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"
- ],
- "authors": [
- {
- "name": "Bryan Tong",
- "email": "bryan@nullivex.com",
- "homepage": "https://www.nullivex.com"
- },
- {
- "name": "Tony Butler",
- "email": "spudz76@gmail.com",
- "homepage": "https://www.nullivex.com"
- }
- ],
- "description": "Array2XML conversion library credit to lalit.org",
- "homepage": "https://www.nullivex.com",
- "keywords": [
- "array",
- "array conversion",
- "xml",
- "xml conversion"
- ],
- "support": {
- "issues": "https://github.com/nullivex/lib-array2xml/issues",
- "source": "https://github.com/nullivex/lib-array2xml/tree/master"
- },
- "time": "2019-03-29T20:06:56+00:00"
- },
- {
- "name": "orklah/psalm-insane-comparison",
- "version": "v1.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/orklah/psalm-insane-comparison.git",
- "reference": "770b9b5273afd16a25243c5895b6949c30dbaaea"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/orklah/psalm-insane-comparison/zipball/770b9b5273afd16a25243c5895b6949c30dbaaea",
- "reference": "770b9b5273afd16a25243c5895b6949c30dbaaea",
- "shasum": ""
- },
- "require": {
- "ext-simplexml": "*",
- "php": "^7.3|^8.0"
- },
- "require-dev": {
- "nikic/php-parser": "^4.0",
- "vimeo/psalm": "^4.0"
- },
- "type": "psalm-plugin",
- "extra": {
- "psalm": {
- "pluginClass": "Orklah\\PsalmInsaneComparison\\Plugin"
- }
- },
- "autoload": {
- "psr-4": {
- "Orklah\\PsalmInsaneComparison\\": [
- "."
- ],
- "Orklah\\PsalmInsaneComparison\\Hooks\\": [
- "hooks"
- ]
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "orklah"
- }
- ],
- "description": "Detects possible insane comparison (\"string\" == 0) to help migrate to PHP8",
- "support": {
- "issues": "https://github.com/orklah/psalm-insane-comparison/issues",
- "source": "https://github.com/orklah/psalm-insane-comparison/tree/v1.0.3"
- },
- "time": "2021-01-12T17:01:14+00:00"
- },
- {
- "name": "pepakriz/phpstan-exception-rules",
- "version": "v0.11.7",
- "source": {
- "type": "git",
- "url": "https://github.com/pepakriz/phpstan-exception-rules.git",
- "reference": "0de69d8fc6e08b6ed79986eb19b9e23355b3d0f4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/pepakriz/phpstan-exception-rules/zipball/0de69d8fc6e08b6ed79986eb19b9e23355b3d0f4",
- "reference": "0de69d8fc6e08b6ed79986eb19b9e23355b3d0f4",
- "shasum": ""
+ "source": "https://github.com/OndraM/ci-detector/tree/4.2.0"
},
- "require": {
- "nikic/php-parser": "^4.4",
- "php": ">=7.1",
- "phpstan/phpstan": "^0.12.26"
- },
- "require-dev": {
- "nette/utils": "^3.0",
- "php-parallel-lint/php-console-highlighter": "^0.4.0",
- "php-parallel-lint/php-parallel-lint": "^1.2.0",
- "phpstan/phpstan-nette": "^0.12.0",
- "phpstan/phpstan-phpunit": "^0.12.0",
- "phpstan/phpstan-strict-rules": "^0.12.0",
- "phpunit/phpunit": "^7.5.6 || ^9.4.2",
- "slevomat/coding-standard": "^6.4.1",
- "squizlabs/php_codesniffer": "~3.5.2"
- },
- "type": "phpstan-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "0.11-dev"
- },
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- }
- },
- "autoload": {
- "psr-4": {
- "Pepakriz\\PHPStanExceptionRules\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Exception rules for PHPStan",
- "support": {
- "issues": "https://github.com/pepakriz/phpstan-exception-rules/issues",
- "source": "https://github.com/pepakriz/phpstan-exception-rules/tree/v0.11.7"
- },
- "time": "2021-05-05T06:07:22+00:00"
+ "time": "2024-03-12T13:22:30+00:00"
},
{
"name": "phar-io/manifest",
- "version": "2.0.3",
+ "version": "2.0.4",
"source": {
"type": "git",
"url": "https://github.com/phar-io/manifest.git",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53"
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
- "reference": "97803eca37d319dfa7826cc2437fc020857acb53",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
"shasum": ""
},
"require": {
"ext-dom": "*",
+ "ext-libxml": "*",
"ext-phar": "*",
"ext-xmlwriter": "*",
"phar-io/version": "^3.0.1",
@@ -4457,9 +3875,15 @@
"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.3"
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
},
- "time": "2021-07-20T11:28:43+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
},
{
"name": "phar-io/version",
@@ -4512,120 +3936,36 @@
},
"time": "2022-02-21T01:04:05+00:00"
},
- {
- "name": "php-coveralls/php-coveralls",
- "version": "v2.5.2",
- "source": {
- "type": "git",
- "url": "https://github.com/php-coveralls/php-coveralls.git",
- "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4",
- "reference": "007e13afdcdba2cd0efcc5f72c3b7efb356a8bd4",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-simplexml": "*",
- "guzzlehttp/guzzle": "^6.0 || ^7.0",
- "php": "^5.5 || ^7.0 || ^8.0",
- "psr/log": "^1.0 || ^2.0",
- "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
- "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
- "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0 || ^6.0",
- "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0 || ^6.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
- "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0"
- },
- "suggest": {
- "symfony/http-kernel": "Allows Symfony integration"
- },
- "bin": [
- "bin/php-coveralls"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "PhpCoveralls\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kitamura Satoshi",
- "email": "with.no.parachute@gmail.com",
- "homepage": "https://www.facebook.com/satooshi.jp",
- "role": "Original creator"
- },
- {
- "name": "Takashi Matsuo",
- "email": "tmatsuo@google.com"
- },
- {
- "name": "Google Inc"
- },
- {
- "name": "Dariusz Ruminski",
- "email": "dariusz.ruminski@gmail.com",
- "homepage": "https://github.com/keradus"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
- }
- ],
- "description": "PHP client library for Coveralls API",
- "homepage": "https://github.com/php-coveralls/php-coveralls",
- "keywords": [
- "ci",
- "coverage",
- "github",
- "test"
- ],
- "support": {
- "issues": "https://github.com/php-coveralls/php-coveralls/issues",
- "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.5.2"
- },
- "time": "2021-12-06T17:05:08+00:00"
- },
{
"name": "php-parallel-lint/php-console-color",
- "version": "v0.3",
+ "version": "v1.0.1",
"source": {
"type": "git",
"url": "https://github.com/php-parallel-lint/PHP-Console-Color.git",
- "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e"
+ "reference": "7adfefd530aa2d7570ba87100a99e2483a543b88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Color/zipball/b6af326b2088f1ad3b264696c9fd590ec395b49e",
- "reference": "b6af326b2088f1ad3b264696c9fd590ec395b49e",
+ "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Color/zipball/7adfefd530aa2d7570ba87100a99e2483a543b88",
+ "reference": "7adfefd530aa2d7570ba87100a99e2483a543b88",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": ">=5.3.2"
},
"replace": {
"jakub-onderka/php-console-color": "*"
},
"require-dev": {
- "php-parallel-lint/php-code-style": "1.0",
- "php-parallel-lint/php-parallel-lint": "1.0",
+ "php-parallel-lint/php-code-style": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.0",
"php-parallel-lint/php-var-dump-check": "0.*",
- "phpunit/phpunit": "~4.3",
- "squizlabs/php_codesniffer": "1.*"
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "JakubOnderka\\PhpConsoleColor\\": "src/"
+ "PHP_Parallel_Lint\\PhpConsoleColor\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4638,45 +3978,45 @@
"email": "jakub.onderka@gmail.com"
}
],
+ "description": "Simple library for creating colored console ouput.",
"support": {
"issues": "https://github.com/php-parallel-lint/PHP-Console-Color/issues",
- "source": "https://github.com/php-parallel-lint/PHP-Console-Color/tree/master"
+ "source": "https://github.com/php-parallel-lint/PHP-Console-Color/tree/v1.0.1"
},
- "time": "2020-05-14T05:47:14+00:00"
+ "time": "2021-12-25T06:49:29+00:00"
},
{
"name": "php-parallel-lint/php-console-highlighter",
- "version": "v0.5",
+ "version": "v1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-parallel-lint/PHP-Console-Highlighter.git",
- "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8"
+ "reference": "5b4803384d3303cf8e84141039ef56c8a123138d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/21bf002f077b177f056d8cb455c5ed573adfdbb8",
- "reference": "21bf002f077b177f056d8cb455c5ed573adfdbb8",
+ "url": "https://api.github.com/repos/php-parallel-lint/PHP-Console-Highlighter/zipball/5b4803384d3303cf8e84141039ef56c8a123138d",
+ "reference": "5b4803384d3303cf8e84141039ef56c8a123138d",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
- "php": ">=5.4.0",
- "php-parallel-lint/php-console-color": "~0.2"
+ "php": ">=5.3.2",
+ "php-parallel-lint/php-console-color": "^1.0.1"
},
"replace": {
"jakub-onderka/php-console-highlighter": "*"
},
"require-dev": {
- "php-parallel-lint/php-code-style": "~1.0",
- "php-parallel-lint/php-parallel-lint": "~1.0",
- "php-parallel-lint/php-var-dump-check": "~0.1",
- "phpunit/phpunit": "~4.0",
- "squizlabs/php_codesniffer": "~1.5"
+ "php-parallel-lint/php-code-style": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.0",
+ "php-parallel-lint/php-var-dump-check": "0.*",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "JakubOnderka\\PhpConsoleHighlighter\\": "src/"
+ "PHP_Parallel_Lint\\PhpConsoleHighlighter\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -4693,22 +4033,22 @@
"description": "Highlight PHP code in terminal",
"support": {
"issues": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/issues",
- "source": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/tree/master"
+ "source": "https://github.com/php-parallel-lint/PHP-Console-Highlighter/tree/v1.0.0"
},
- "time": "2020-05-13T07:37:49+00:00"
+ "time": "2022-02-18T08:23:19+00:00"
},
{
"name": "php-parallel-lint/php-parallel-lint",
- "version": "v1.3.2",
+ "version": "v1.4.0",
"source": {
"type": "git",
"url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git",
- "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de"
+ "reference": "6db563514f27e19595a19f45a4bf757b6401194e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de",
- "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de",
+ "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6db563514f27e19595a19f45a4bf757b6401194e",
+ "reference": "6db563514f27e19595a19f45a4bf757b6401194e",
"shasum": ""
},
"require": {
@@ -4746,843 +4086,1398 @@
"email": "ahoj@jakubonderka.cz"
}
],
- "description": "This tool check syntax of PHP files about 20x faster than serial check.",
+ "description": "This tool checks the syntax of PHP files about 20x faster than serial check.",
"homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint",
+ "keywords": [
+ "lint",
+ "static analysis"
+ ],
"support": {
"issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues",
- "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2"
+ "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.4.0"
},
- "time": "2022-02-21T12:50:22+00:00"
+ "time": "2024-03-27T12:14:49+00:00"
+ },
+ {
+ "name": "phpstan/extension-installer",
+ "version": "1.4.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/extension-installer.git",
+ "reference": "85e90b3942d06b2326fba0403ec24fe912372936"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/extension-installer/zipball/85e90b3942d06b2326fba0403ec24fe912372936",
+ "reference": "85e90b3942d06b2326fba0403ec24fe912372936",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^2.0",
+ "php": "^7.2 || ^8.0",
+ "phpstan/phpstan": "^1.9.0 || ^2.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2.0",
+ "phpstan/phpstan-strict-rules": "^0.11 || ^0.12 || ^1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "PHPStan\\ExtensionInstaller\\Plugin"
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\ExtensionInstaller\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Composer plugin for automatic installation of PHPStan extensions",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpstan/extension-installer/issues",
+ "source": "https://github.com/phpstan/extension-installer/tree/1.4.3"
+ },
+ "time": "2024-09-04T20:21:43+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "2.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a",
+ "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/annotations": "^2.0",
+ "nikic/php-parser": "^5.3.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6",
+ "symfony/process": "^5.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\PhpDocParser\\": [
+ "src/"
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "support": {
+ "issues": "https://github.com/phpstan/phpdoc-parser/issues",
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2"
+ },
+ "time": "2026-01-25T14:56:51+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "2.2.2",
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e5cc34d491a90e79c216d824f60fe21fd4d93bd6",
+ "reference": "e5cc34d491a90e79c216d824f60fe21fd4d93bd6",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ondřej Mirtes"
+ },
+ {
+ "name": "Markus Staab"
+ },
+ {
+ "name": "Vincent Langlet"
+ }
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-05T09:00:01+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-deprecation-rules",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-deprecation-rules.git",
+ "reference": "6b5571001a7f04fa0422254c30a0017ec2f2cacc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/6b5571001a7f04fa0422254c30a0017ec2f2cacc",
+ "reference": "6b5571001a7f04fa0422254c30a0017ec2f2cacc",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.1.39"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "rules.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues",
+ "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.4"
+ },
+ "time": "2026-02-09T13:21:14+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-mockery",
+ "version": "2.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-mockery.git",
+ "reference": "89a949d0ac64298e88b7c7fa00caee565c198394"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/89a949d0ac64298e88b7c7fa00caee565c198394",
+ "reference": "89a949d0ac64298e88b7c7fa00caee565c198394",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.6.11",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan Mockery extension",
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-mockery/issues",
+ "source": "https://github.com/phpstan/phpstan-mockery/tree/2.0.0"
+ },
+ "time": "2024-10-14T03:18:12+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-phpunit",
+ "version": "2.0.16",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-phpunit.git",
+ "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/6ab598e1bc106e6827fd346ae4a12b4a5d634c32",
+ "reference": "6ab598e1bc106e6827fd346ae4a12b4a5d634c32",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.1.32"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<7.0"
+ },
+ "require-dev": {
+ "nikic/php-parser": "^5",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon",
+ "rules.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPUnit extensions and rules for PHPStan",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-phpunit/issues",
+ "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.16"
+ },
+ "time": "2026-02-14T09:05:21+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-strict-rules",
+ "version": "2.0.11",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-strict-rules.git",
+ "reference": "9b000a578b85b32945b358b172c7b20e91189024"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/9b000a578b85b32945b358b172c7b20e91189024",
+ "reference": "9b000a578b85b32945b358b172c7b20e91189024",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.1.39"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpstan-deprecation-rules": "^2.0",
+ "phpstan/phpstan-phpunit": "^2.0",
+ "phpunit/phpunit": "^9.6"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "rules.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PHPStan\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Extra strict and opinionated rules for PHPStan",
+ "keywords": [
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.11"
+ },
+ "time": "2026-05-02T06:54:10+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "14.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/10d7da3628a99289cdf4c662dd7f0d73f1baec83",
+ "reference": "10d7da3628a99289cdf4c662dd7f0d73f1baec83",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.4",
+ "phpunit/php-text-template": "^6.0",
+ "sebastian/complexity": "^6.0",
+ "sebastian/environment": "^9.3.2",
+ "sebastian/git-state": "^1.0",
+ "sebastian/lines-of-code": "^5.0.1",
+ "sebastian/version": "^7.0",
+ "theseer/tokenizer": "^2.0.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.2.0"
+ },
+ "suggest": {
+ "ext-pcov": "PHP extension that provides line coverage",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "14.2.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+ "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "keywords": [
+ "coverage",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/14.2.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/phpunit/php-code-coverage",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-06-08T11:50:38+00:00"
},
{
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
+ "name": "phpunit/php-file-iterator",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
+ "reference": "6e5aa1fb0a95b1703d83e721299ee18bb4e2de50",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0"
+ "php": ">=8.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-2.x": "2.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": "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",
+ "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+ "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
+ "filesystem",
+ "iterator"
],
"support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ "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/7.0.0"
},
- "time": "2020-06-27T09:03:43+00:00"
+ "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": "2026-02-06T04:33:26+00:00"
},
{
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.3.0",
+ "name": "phpunit/php-invoker",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
- "reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
+ "reference": "42e5c5cae0c65df12d1b1a3ab52bf3f50f244d88",
"shasum": ""
},
"require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
+ "php": ">=8.4"
},
"require-dev": {
- "mockery/mockery": "~1.3.2",
- "psalm/phar": "^4.8"
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^13.0"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
},
"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": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
"support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
+ "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/7.0.0"
},
- "time": "2021-10-19T17:43:47+00:00"
+ "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-invoker",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-06T04:34:47+00:00"
},
{
- "name": "phpdocumentor/type-resolver",
- "version": "1.6.0",
+ "name": "phpunit/php-text-template",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
- "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/a47af19f93f76aa3368303d752aa5272ca3299f4",
+ "reference": "a47af19f93f76aa3368303d752aa5272ca3299f4",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
+ "php": ">=8.4"
},
"require-dev": {
- "ext-tokenizer": "*",
- "psalm/phar": "^4.8"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-1.x": "1.x-dev"
+ "dev-main": "6.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",
+ "role": "lead"
}
],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
"support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
+ "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/6.0.0"
},
- "time": "2022-01-04T19:58:01+00:00"
+ "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-text-template",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-06T04:36:37+00:00"
},
{
- "name": "phpspec/prophecy",
- "version": "v1.15.0",
+ "name": "phpunit/php-timer",
+ "version": "9.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
- "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/a0e12065831f6ab0d83120dc61513eb8d9a966f6",
+ "reference": "a0e12065831f6ab0d83120dc61513eb8d9a966f6",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.2",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
+ "php": ">=8.4"
},
"require-dev": {
- "phpspec/phpspec": "^6.0 || ^7.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.x-dev"
+ "dev-main": "9.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",
+ "role": "lead"
}
],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
+ "timer"
],
"support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
+ "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/9.0.0"
},
- "time": "2021-12-08T12:19:24+00:00"
+ "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-timer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-06T04:37:53+00:00"
},
{
- "name": "phpspec/prophecy-phpunit",
- "version": "v2.0.1",
+ "name": "phpunit/phpunit",
+ "version": "13.1.14",
"source": {
"type": "git",
- "url": "https://github.com/phpspec/prophecy-phpunit.git",
- "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177"
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "cdd419c33c040c6b570e51dba8ecbe81d399da53"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy-phpunit/zipball/2d7a9df55f257d2cba9b1d0c0963a54960657177",
- "reference": "2d7a9df55f257d2cba9b1d0c0963a54960657177",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/cdd419c33c040c6b570e51dba8ecbe81d399da53",
+ "reference": "cdd419c33c040c6b570e51dba8ecbe81d399da53",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8",
- "phpspec/prophecy": "^1.3",
- "phpunit/phpunit": "^9.1"
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.4",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=8.4.1",
+ "phpunit/php-code-coverage": "^14.1.10",
+ "phpunit/php-file-iterator": "^7.0.0",
+ "phpunit/php-invoker": "^7.0.0",
+ "phpunit/php-text-template": "^6.0.0",
+ "phpunit/php-timer": "^9.0.0",
+ "sebastian/cli-parser": "^5.0.0",
+ "sebastian/comparator": "^8.2.1",
+ "sebastian/diff": "^8.3.0",
+ "sebastian/environment": "^9.3.2",
+ "sebastian/exporter": "^8.1.0",
+ "sebastian/git-state": "^1.0",
+ "sebastian/global-state": "^9.0.1",
+ "sebastian/object-enumerator": "^8.0.0",
+ "sebastian/recursion-context": "^8.0.0",
+ "sebastian/type": "^7.0.1",
+ "sebastian/version": "^7.0.0",
+ "staabm/side-effects-detector": "^1.0.5"
},
+ "bin": [
+ "phpunit"
+ ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "13.1-dev"
}
},
"autoload": {
- "psr-4": {
- "Prophecy\\PhpUnit\\": "src"
- }
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Christophe Coevoet",
- "email": "stof@notk.org"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Integrating the Prophecy mocking library in PHPUnit test cases",
- "homepage": "http://phpspec.net",
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
- "prophecy"
+ "testing",
+ "xunit"
],
"support": {
- "issues": "https://github.com/phpspec/prophecy-phpunit/issues",
- "source": "https://github.com/phpspec/prophecy-phpunit/tree/v2.0.1"
- },
- "time": "2020-07-09T08:33:42+00:00"
- },
- {
- "name": "phpstan/phpdoc-parser",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/dbc093d7af60eff5cd575d2ed761b15ed40bd08e",
- "reference": "dbc093d7af60eff5cd575d2ed761b15ed40bd08e",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/extension-installer": "^1.0",
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.0",
- "phpunit/phpunit": "^9.5",
- "symfony/process": "^5.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- }
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/13.1.14"
},
- "autoload": {
- "psr-4": {
- "PHPStan\\PhpDocParser\\": [
- "src/"
- ]
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsoring.html",
+ "type": "other"
}
- },
- "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.2.0"
- },
- "time": "2021-09-16T20:46:02+00:00"
+ "time": "2026-06-04T06:16:42+00:00"
},
{
- "name": "phpstan/phpstan",
- "version": "0.12.99",
+ "name": "psr/clock",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7"
+ "url": "https://github.com/php-fig/clock.git",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7",
- "reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7",
+ "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d",
+ "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0"
- },
- "conflict": {
- "phpstan/phpstan-shim": "*"
+ "php": "^7.0 || ^8.0"
},
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.12-dev"
- }
- },
"autoload": {
- "files": [
- "bootstrap.php"
- ]
+ "psr-4": {
+ "Psr\\Clock\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHPStan - PHP Static Analysis Tool",
- "support": {
- "issues": "https://github.com/phpstan/phpstan/issues",
- "source": "https://github.com/phpstan/phpstan/tree/0.12.99"
- },
- "funding": [
- {
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
- },
- {
- "url": "https://github.com/phpstan",
- "type": "github"
- },
- {
- "url": "https://www.patreon.com/phpstan",
- "type": "patreon"
- },
+ "authors": [
{
- "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
- "type": "tidelift"
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
}
],
- "time": "2021-09-12T20:09:55+00:00"
+ "description": "Common interface for reading the clock.",
+ "homepage": "https://github.com/php-fig/clock",
+ "keywords": [
+ "clock",
+ "now",
+ "psr",
+ "psr-20",
+ "time"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/clock/issues",
+ "source": "https://github.com/php-fig/clock/tree/1.0.0"
+ },
+ "time": "2022-11-25T14:36:26+00:00"
},
{
- "name": "phpstan/phpstan-deprecation-rules",
- "version": "0.12.6",
+ "name": "psr/container",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan-deprecation-rules.git",
- "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb"
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/46dbd43c2db973d2876d6653e53f5c2cc3a01fbb",
- "reference": "46dbd43c2db973d2876d6653e53f5c2cc3a01fbb",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963",
+ "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.12.60"
- },
- "require-dev": {
- "phing/phing": "^2.16.3",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.5.20"
+ "php": ">=7.4.0"
},
- "type": "phpstan-extension",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.12-dev"
- },
- "phpstan": {
- "includes": [
- "rules.neon"
- ]
+ "dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-4": {
- "PHPStan\\": "src/"
+ "Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.",
+ "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/phpstan/phpstan-deprecation-rules/issues",
- "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/0.12.6"
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/2.0.2"
},
- "time": "2020-12-13T10:20:54+00:00"
+ "time": "2021-11-05T16:47:00+00:00"
},
{
- "name": "phpstan/phpstan-php-parser",
- "version": "0.12.3",
+ "name": "psr/log",
+ "version": "3.0.2",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan-php-parser.git",
- "reference": "e140bc57f3bd5e8a4d45155556618a43736592e9"
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-php-parser/zipball/e140bc57f3bd5e8a4d45155556618a43736592e9",
- "reference": "e140bc57f3bd5e8a4d45155556618a43736592e9",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.12.60"
- },
- "require-dev": {
- "phing/phing": "^2.16.3",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^0.12.16",
- "phpstan/phpstan-strict-rules": "^0.12.6",
- "phpunit/phpunit": "^7.5.20"
+ "php": ">=8.0.0"
},
- "type": "phpstan-extension",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-master": "0.12-dev"
- },
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
+ "dev-master": "3.x-dev"
}
},
"autoload": {
"psr-4": {
- "PHPStan\\": "src/"
+ "Psr\\Log\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHP-Parser extensions for PHPStan",
+ "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": {
- "issues": "https://github.com/phpstan/phpstan-php-parser/issues",
- "source": "https://github.com/phpstan/phpstan-php-parser/tree/0.12.3"
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
},
- "time": "2020-12-12T21:05:25+00:00"
+ "time": "2024-09-11T13:17:53+00:00"
},
{
- "name": "phpstan/phpstan-phpunit",
- "version": "0.12.22",
+ "name": "react/async",
+ "version": "v4.3.0",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan-phpunit.git",
- "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc"
+ "url": "https://github.com/reactphp/async.git",
+ "reference": "635d50e30844a484495713e8cb8d9e079c0008a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc",
- "reference": "7c01ef93bf128b4ac8bdad38c54b2a4fd6b0b3cc",
+ "url": "https://api.github.com/repos/reactphp/async/zipball/635d50e30844a484495713e8cb8d9e079c0008a5",
+ "reference": "635d50e30844a484495713e8cb8d9e079c0008a5",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.12.92"
- },
- "conflict": {
- "phpunit/phpunit": "<7.0"
+ "php": ">=8.1",
+ "react/event-loop": "^1.2",
+ "react/promise": "^3.2 || ^2.8 || ^1.2.1"
},
"require-dev": {
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-strict-rules": "^0.12.6",
- "phpunit/phpunit": "^9.5"
- },
- "type": "phpstan-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "0.12-dev"
- },
- "phpstan": {
- "includes": [
- "extension.neon",
- "rules.neon"
- ]
- }
+ "phpstan/phpstan": "1.10.39",
+ "phpunit/phpunit": "^9.6"
},
+ "type": "library",
"autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
"psr-4": {
- "PHPStan\\": "src/"
+ "React\\Async\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHPUnit extensions and rules for PHPStan",
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "Async utilities and fibers for ReactPHP",
+ "keywords": [
+ "async",
+ "reactphp"
+ ],
"support": {
- "issues": "https://github.com/phpstan/phpstan-phpunit/issues",
- "source": "https://github.com/phpstan/phpstan-phpunit/tree/0.12.22"
+ "issues": "https://github.com/reactphp/async/issues",
+ "source": "https://github.com/reactphp/async/tree/v4.3.0"
},
- "time": "2021-08-12T10:53:43+00:00"
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-06-04T14:40:02+00:00"
},
{
- "name": "phpstan/phpstan-strict-rules",
- "version": "0.12.11",
+ "name": "rector/rector",
+ "version": "2.4.6",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "2b72e8e17d2034145f239126e876e5fb659675e2"
+ "url": "https://github.com/rectorphp/rector.git",
+ "reference": "9b9e5c76618e4d359f65b54ca2eabcad3d1761ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/2b72e8e17d2034145f239126e876e5fb659675e2",
- "reference": "2b72e8e17d2034145f239126e876e5fb659675e2",
+ "url": "https://api.github.com/repos/rectorphp/rector/zipball/9b9e5c76618e4d359f65b54ca2eabcad3d1761ee",
+ "reference": "9b9e5c76618e4d359f65b54ca2eabcad3d1761ee",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.12.96"
+ "php": "^7.4|^8.0",
+ "phpstan/phpstan": "^2.2.2"
},
- "require-dev": {
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpstan-phpunit": "^0.12.16",
- "phpunit/phpunit": "^9.5"
+ "conflict": {
+ "rector/rector-doctrine": "*",
+ "rector/rector-downgrade-php": "*",
+ "rector/rector-phpunit": "*",
+ "rector/rector-symfony": "*"
},
- "type": "phpstan-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "0.12-dev"
- },
- "phpstan": {
- "includes": [
- "rules.neon"
- ]
- }
+ "suggest": {
+ "ext-dom": "To manipulate phpunit.xml via the custom-rule command"
},
+ "bin": [
+ "bin/rector"
+ ],
+ "type": "library",
"autoload": {
- "psr-4": {
- "PHPStan\\": "src/"
- }
+ "files": [
+ "bootstrap.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Extra strict and opinionated rules for PHPStan",
+ "description": "Instant Upgrade and Automated Refactoring of any PHP code",
+ "homepage": "https://getrector.com/",
+ "keywords": [
+ "automation",
+ "dev",
+ "migration",
+ "refactoring"
+ ],
"support": {
- "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/0.12.11"
+ "issues": "https://github.com/rectorphp/rector/issues",
+ "source": "https://github.com/rectorphp/rector/tree/2.4.6"
},
- "time": "2021-08-21T11:36:27+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-17T11:56:28+00:00"
},
{
- "name": "phpunit/php-code-coverage",
- "version": "9.2.14",
+ "name": "revolt/event-loop",
+ "version": "v1.0.9",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4"
+ "url": "https://github.com/revoltphp/event-loop.git",
+ "reference": "44061cf513e53c6200372fc935ac42271566295d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f4d60b6afe5546421462b76cd4e633ebc364ab4",
- "reference": "9f4d60b6afe5546421462b76cd4e633ebc364ab4",
+ "url": "https://api.github.com/repos/revoltphp/event-loop/zipball/44061cf513e53c6200372fc935ac42271566295d",
+ "reference": "44061cf513e53c6200372fc935ac42271566295d",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "ext-libxml": "*",
- "ext-xmlwriter": "*",
- "nikic/php-parser": "^4.13.0",
- "php": ">=7.3",
- "phpunit/php-file-iterator": "^3.0.3",
- "phpunit/php-text-template": "^2.0.2",
- "sebastian/code-unit-reverse-lookup": "^2.0.2",
- "sebastian/complexity": "^2.0",
- "sebastian/environment": "^5.1.2",
- "sebastian/lines-of-code": "^1.0.3",
- "sebastian/version": "^3.0.1",
- "theseer/tokenizer": "^1.2.0"
+ "php": ">=8.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-pcov": "*",
- "ext-xdebug": "*"
+ "ext-json": "*",
+ "jetbrains/phpstorm-stubs": "^2019.3",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "6.16.*"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.2-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Revolt\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Aaron Piotrowski",
+ "email": "aaron@trowski.com"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "ceesjank@gmail.com"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
}
],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+ "description": "Rock-solid event loop for concurrent PHP applications.",
"keywords": [
- "coverage",
- "testing",
- "xunit"
+ "async",
+ "asynchronous",
+ "concurrency",
+ "event",
+ "event-loop",
+ "non-blocking",
+ "scheduler"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.14"
+ "issues": "https://github.com/revoltphp/event-loop/issues",
+ "source": "https://github.com/revoltphp/event-loop/tree/v1.0.9"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-02-28T12:38:02+00:00"
+ "time": "2026-05-16T17:55:38+00:00"
},
{
- "name": "phpunit/php-file-iterator",
- "version": "3.0.6",
+ "name": "roave/backward-compatibility-check",
+ "version": "8.19.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ "url": "https://github.com/Roave/BackwardCompatibilityCheck.git",
+ "reference": "810eb88eeff37ef300653bcfb77ca51a314777a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
- "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "url": "https://api.github.com/repos/Roave/BackwardCompatibilityCheck/zipball/810eb88eeff37ef300653bcfb77ca51a314777a2",
+ "reference": "810eb88eeff37ef300653bcfb77ca51a314777a2",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "azjezz/psl": "^4.2.1",
+ "composer/composer": "^2.9.5",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-simplexml": "*",
+ "nikic/php-parser": "^5.7.0",
+ "nikolaposa/version": "^4.2.1",
+ "ocramius/package-versions": "^2.11.0",
+ "php": "~8.3.0 || ~8.4.0 || ~8.5.0",
+ "roave/better-reflection": "^6.69.0",
+ "symfony/console": "^7.4.4"
+ },
+ "conflict": {
+ "marc-mabe/php-enum": "<4.7.2",
+ "revolt/event-loop": "<0.2.5",
+ "symfony/process": "<5.3.7"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "doctrine/coding-standard": "^14.0.0",
+ "justinrainbow/json-schema": "^6.6.4",
+ "php-standard-library/psalm-plugin": "^2.3.0",
+ "phpunit/phpunit": "^12.5.11",
+ "psalm/plugin-phpunit": "^0.19.5",
+ "roave/infection-static-analysis-plugin": "^1.43.0",
+ "roave/security-advisories": "dev-master",
+ "squizlabs/php_codesniffer": "^4.0.1",
+ "vimeo/psalm": "^6.15.1"
},
+ "bin": [
+ "bin/roave-backward-compatibility-check"
+ ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Roave\\BackwardCompatibility\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
+ "name": "James Titcumb",
+ "email": "james@asgrim.com"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com"
}
],
- "time": "2021-12-02T12:48:52+00:00"
+ "description": "Tool to compare two revisions of a public API to check for BC breaks",
+ "support": {
+ "issues": "https://github.com/Roave/BackwardCompatibilityCheck/issues",
+ "source": "https://github.com/Roave/BackwardCompatibilityCheck/tree/8.19.0"
+ },
+ "time": "2026-02-13T19:14:25+00:00"
},
{
- "name": "phpunit/php-invoker",
- "version": "3.1.1",
+ "name": "roave/better-reflection",
+ "version": "6.71.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-invoker.git",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ "url": "https://github.com/Roave/BetterReflection.git",
+ "reference": "3ec176d4a161b4e8764edc625d69ff624ca390b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
- "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/3ec176d4a161b4e8764edc625d69ff624ca390b1",
+ "reference": "3ec176d4a161b4e8764edc625d69ff624ca390b1",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "ext-json": "*",
+ "jetbrains/phpstorm-stubs": "2026.1",
+ "nikic/php-parser": "^5.7.0",
+ "php": "~8.4.1 || ~8.5.0"
+ },
+ "conflict": {
+ "thecodingmachine/safe": "<1.1.3"
},
"require-dev": {
- "ext-pcntl": "*",
- "phpunit/phpunit": "^9.3"
+ "phpbench/phpbench": "^1.6.1",
+ "phpunit/phpunit": "^13.1.8"
},
"suggest": {
- "ext-pcntl": "*"
+ "composer/composer": "Required to use the ComposerSourceLocator"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Roave\\BetterReflection\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "James Titcumb",
+ "email": "james@asgrim.com",
+ "homepage": "https://github.com/asgrim"
+ },
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ },
+ {
+ "name": "Gary Hockin",
+ "email": "gary@roave.com",
+ "homepage": "https://github.com/geeh"
+ },
+ {
+ "name": "Jaroslav Hanslík",
+ "email": "kukulich@kukulich.cz",
+ "homepage": "https://github.com/kukulich"
}
],
- "description": "Invoke callables with a timeout",
- "homepage": "https://github.com/sebastianbergmann/php-invoker/",
- "keywords": [
- "process"
- ],
+ "description": "Better Reflection - an improved code reflection API",
"support": {
- "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
- "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ "issues": "https://github.com/Roave/BetterReflection/issues",
+ "source": "https://github.com/Roave/BetterReflection/tree/6.71.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:58:55+00:00"
+ "time": "2026-05-02T10:56:00+00:00"
},
{
- "name": "phpunit/php-text-template",
- "version": "2.0.4",
+ "name": "sanmai/di-container",
+ "version": "0.1.17",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ "url": "https://github.com/sanmai/di-container.git",
+ "reference": "a901c4a8778c9212ef4d66607525281af2f787bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
- "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "url": "https://api.github.com/repos/sanmai/di-container/zipball/a901c4a8778c9212ef4d66607525281af2f787bd",
+ "reference": "a901c4a8778c9212ef4d66607525281af2f787bd",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.2",
+ "psr/container": "^1.1.2 || ^2.0",
+ "sanmai/pipeline": "^6.17 || ^7.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "ergebnis/composer-normalize": "^2.8",
+ "friendsofphp/php-cs-fixer": "^3.17",
+ "infection/infection": ">=0.31",
+ "php-coveralls/php-coveralls": "^2.4.1",
+ "phpbench/phpbench": "^1.4",
+ "phpstan/extension-installer": "^1.4",
+ "phpunit/phpunit": "^11.5.25",
+ "sanmai/phpstan-rules": "^0.3.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
- }
+ "dev-main": "0.1.x-dev"
+ },
+ "preferred-install": "dist"
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "DIContainer\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -5590,820 +5485,1016 @@
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Alexey Kopytko",
+ "email": "alexey@kopytko.com",
+ "homepage": "https://github.com/sanmai"
+ },
+ {
+ "name": "Maks Rafalko",
+ "homepage": "https://twitter.com/maks_rafalko"
+ },
+ {
+ "name": "Théo FIDRY",
+ "homepage": "https://twitter.com/tfidry"
}
],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "description": "dependency injection container with automatic constructor dependency resolution",
"keywords": [
- "template"
+ "Autowiring",
+ "constructor di",
+ "di container",
+ "psr 11"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ "issues": "https://github.com/sanmai/di-container/issues",
+ "source": "https://github.com/sanmai/di-container/tree/0.1.17"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/sanmai",
"type": "github"
}
],
- "time": "2020-10-26T05:33:50+00:00"
+ "time": "2026-06-01T08:52:14+00:00"
},
{
- "name": "phpunit/php-timer",
- "version": "5.0.3",
+ "name": "sanmai/duoclock",
+ "version": "0.1.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ "url": "https://github.com/sanmai/DuoClock.git",
+ "reference": "47461e3ff65b7308635047831a55615652e7be1a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
- "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "url": "https://api.github.com/repos/sanmai/DuoClock/zipball/47461e3ff65b7308635047831a55615652e7be1a",
+ "reference": "47461e3ff65b7308635047831a55615652e7be1a",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.2",
+ "psr/clock": "^1.0"
+ },
+ "provide": {
+ "psr/clock-implementation": "1.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "ergebnis/composer-normalize": "^2.8",
+ "friendsofphp/php-cs-fixer": "^3.17",
+ "infection/infection": ">=0.29",
+ "php-coveralls/php-coveralls": "^2.4.1",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^11.5.25",
+ "sanmai/phpstan-rules": "^0.3.1"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
- }
+ "preferred-install": "dist"
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "DuoClock\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "Apache-2.0"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Alexey Kopytko",
+ "email": "alexey@kopytko.com"
}
],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
+ "description": "PHP time mocking for tests - PSR-20 clock with mockable sleep(), time(), and TimeSpy for PHPUnit testing",
"support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ "issues": "https://github.com/sanmai/DuoClock/issues",
+ "source": "https://github.com/sanmai/DuoClock/tree/0.1.3"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/sanmai",
"type": "github"
}
],
- "time": "2020-10-26T13:16:10+00:00"
+ "time": "2025-12-26T06:12:34+00:00"
},
{
- "name": "phpunit/phpunit",
- "version": "9.5.16",
+ "name": "sanmai/later",
+ "version": "0.1.7",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc"
+ "url": "https://github.com/sanmai/later.git",
+ "reference": "72a82d783864bca90412d8a26c1878f8981fee97"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc",
- "reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc",
+ "url": "https://api.github.com/repos/sanmai/later/zipball/72a82d783864bca90412d8a26c1878f8981fee97",
+ "reference": "72a82d783864bca90412d8a26c1878f8981fee97",
"shasum": ""
},
"require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.1",
- "phar-io/manifest": "^2.0.3",
- "phar-io/version": "^3.0.2",
- "php": ">=7.3",
- "phpspec/prophecy": "^1.12.1",
- "phpunit/php-code-coverage": "^9.2.13",
- "phpunit/php-file-iterator": "^3.0.5",
- "phpunit/php-invoker": "^3.1.1",
- "phpunit/php-text-template": "^2.0.3",
- "phpunit/php-timer": "^5.0.2",
- "sebastian/cli-parser": "^1.0.1",
- "sebastian/code-unit": "^1.0.6",
- "sebastian/comparator": "^4.0.5",
- "sebastian/diff": "^4.0.3",
- "sebastian/environment": "^5.1.3",
- "sebastian/exporter": "^4.0.3",
- "sebastian/global-state": "^5.0.1",
- "sebastian/object-enumerator": "^4.0.3",
- "sebastian/resource-operations": "^3.0.3",
- "sebastian/type": "^2.3.4",
- "sebastian/version": "^3.0.2"
+ "php": ">=8.2"
},
"require-dev": {
- "ext-pdo": "*",
- "phpspec/prophecy-phpunit": "^2.0.1"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*"
+ "ergebnis/composer-normalize": "^2.8",
+ "friendsofphp/php-cs-fixer": "^3.35.1",
+ "infection/infection": ">=0.27.6",
+ "phan/phan": ">=2",
+ "php-coveralls/php-coveralls": "^2.0",
+ "phpstan/phpstan": ">=1.4.5",
+ "phpunit/phpunit": ">=9.5 <10",
+ "vimeo/psalm": ">=2"
},
- "bin": [
- "phpunit"
- ],
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "9.5-dev"
+ "dev-main": "0.1.x-dev"
}
},
"autoload": {
"files": [
- "src/Framework/Assert/Functions.php"
+ "src/functions.php"
],
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Later\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "Apache-2.0"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Alexey Kopytko",
+ "email": "alexey@kopytko.com"
}
],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
+ "description": "Later: deferred wrapper object",
"support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16"
+ "issues": "https://github.com/sanmai/later/issues",
+ "source": "https://github.com/sanmai/later/tree/0.1.7"
},
"funding": [
{
- "url": "https://phpunit.de/sponsors.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/sanmai",
"type": "github"
}
],
- "time": "2022-02-23T17:10:58+00:00"
+ "time": "2025-05-11T01:48:00+00:00"
},
{
- "name": "psalm/plugin-phpunit",
- "version": "0.16.1",
+ "name": "sanmai/pipeline",
+ "version": "7.9",
"source": {
"type": "git",
- "url": "https://github.com/psalm/psalm-plugin-phpunit.git",
- "reference": "5dd3be04f37a857d52880ef6af2524a441dfef24"
+ "url": "https://github.com/sanmai/pipeline.git",
+ "reference": "d7046ecce91ae57fca403be694888371a21250eb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psalm/psalm-plugin-phpunit/zipball/5dd3be04f37a857d52880ef6af2524a441dfef24",
- "reference": "5dd3be04f37a857d52880ef6af2524a441dfef24",
+ "url": "https://api.github.com/repos/sanmai/pipeline/zipball/d7046ecce91ae57fca403be694888371a21250eb",
+ "reference": "d7046ecce91ae57fca403be694888371a21250eb",
"shasum": ""
},
"require": {
- "composer/package-versions-deprecated": "^1.10",
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "ext-simplexml": "*",
- "php": "^7.1 || ^8.0",
- "vimeo/psalm": "dev-master || dev-4.x || ^4.5"
- },
- "conflict": {
- "phpunit/phpunit": "<7.5"
+ "php": ">=8.2"
},
"require-dev": {
- "codeception/codeception": "^4.0.3",
- "php": "^7.3 || ^8.0",
- "phpunit/phpunit": "^7.5 || ^8.0 || ^9.0",
- "squizlabs/php_codesniffer": "^3.3.1",
- "weirdan/codeception-psalm-module": "^0.11.0",
- "weirdan/prophecy-shim": "^1.0 || ^2.0"
- },
- "type": "psalm-plugin",
+ "ergebnis/composer-normalize": "^2.8",
+ "esi/phpunit-coverage-check": ">2",
+ "friendsofphp/php-cs-fixer": "^3.17",
+ "infection/infection": ">=0.32.3",
+ "league/pipeline": "^0.3 || ^1.0",
+ "php-coveralls/php-coveralls": "^2.4.1",
+ "phpstan/extension-installer": "^1.4",
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": ">=9.4 <12",
+ "sanmai/phpstan-rules": "^0.3.11",
+ "sanmai/phpunit-double-colon-syntax": "^0.1.1",
+ "vimeo/psalm": ">=2"
+ },
+ "type": "library",
"extra": {
- "psalm": {
- "pluginClass": "Psalm\\PhpUnitPlugin\\Plugin"
+ "branch-alias": {
+ "dev-main": "7.x-dev"
}
},
"autoload": {
+ "files": [
+ "src/functions.php"
+ ],
"psr-4": {
- "Psalm\\PhpUnitPlugin\\": "src"
+ "Pipeline\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "Apache-2.0"
],
"authors": [
{
- "name": "Matt Brown",
- "email": "github@muglug.com"
+ "name": "Alexey Kopytko",
+ "email": "alexey@kopytko.com"
}
],
- "description": "Psalm plugin for PHPUnit",
+ "description": "General-purpose collections pipeline",
"support": {
- "issues": "https://github.com/psalm/psalm-plugin-phpunit/issues",
- "source": "https://github.com/psalm/psalm-plugin-phpunit/tree/0.16.1"
+ "issues": "https://github.com/sanmai/pipeline/issues",
+ "source": "https://github.com/sanmai/pipeline/tree/7.9"
},
- "time": "2021-06-18T23:56:46+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sanmai",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-16T11:54:05+00:00"
},
{
- "name": "psr/container",
- "version": "1.1.2",
+ "name": "sebastian/cli-parser",
+ "version": "5.0.0",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/48a4654fa5e48c1c81214e9930048a572d4b23ca",
+ "reference": "48a4654fa5e48c1c81214e9930048a572d4b23ca",
"shasum": ""
},
"require": {
- "php": ">=7.4.0"
+ "php": ">=8.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
"support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
+ "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/5.0.0"
},
- "time": "2021-11-05T16:50:12+00:00"
+ "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": "2026-02-06T04:39:44+00:00"
},
{
- "name": "psr/http-client",
- "version": "1.0.1",
+ "name": "sebastian/comparator",
+ "version": "8.2.1",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/http-client.git",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/ce999bf08b2c387a5423fe56961c32eed3f88089",
+ "reference": "ce999bf08b2c387a5423fe56961c32eed3f88089",
"shasum": ""
},
"require": {
- "php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0"
+ "ext-dom": "*",
+ "ext-mbstring": "*",
+ "php": ">=8.4",
+ "sebastian/diff": "^8.3",
+ "sebastian/exporter": "^8.0.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.1.10"
+ },
+ "suggest": {
+ "ext-bcmath": "For comparing BcMath\\Number objects"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-main": "8.2-dev"
}
},
"autoload": {
- "psr-4": {
- "Psr\\Http\\Client\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "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": "Common interface for HTTP clients",
- "homepage": "https://github.com/php-fig/http-client",
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
"keywords": [
- "http",
- "http-client",
- "psr",
- "psr-18"
+ "comparator",
+ "compare",
+ "equality"
],
"support": {
- "source": "https://github.com/php-fig/http-client/tree/master"
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "security": "https://github.com/sebastianbergmann/comparator/security/policy",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/8.2.1"
},
- "time": "2020-06-29T06:28:15+00:00"
+ "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": "2026-05-21T04:46:40+00:00"
},
{
- "name": "psr/http-factory",
- "version": "1.0.1",
+ "name": "sebastian/complexity",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/http-factory.git",
- "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be"
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "c5651c795c98093480df79350cb050813fc7a2f3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
- "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/c5651c795c98093480df79350cb050813fc7a2f3",
+ "reference": "c5651c795c98093480df79350cb050813fc7a2f3",
"shasum": ""
},
"require": {
- "php": ">=7.0.0",
- "psr/http-message": "^1.0"
+ "nikic/php-parser": "^5.0",
+ "php": ">=8.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Common interfaces for PSR-7 HTTP message factories",
- "keywords": [
- "factory",
- "http",
- "message",
- "psr",
- "psr-17",
- "psr-7",
- "request",
- "response"
- ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
"support": {
- "source": "https://github.com/php-fig/http-factory/tree/master"
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "security": "https://github.com/sebastianbergmann/complexity/security/policy",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/6.0.0"
},
- "time": "2019-04-30T12:38:16+00:00"
+ "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/complexity",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-02-06T04:41:32+00:00"
},
{
- "name": "psr/log",
- "version": "1.1.4",
+ "name": "sebastian/diff",
+ "version": "8.3.0",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/b36d33b6e796513de7cb7df053afb3f55eefcd47",
+ "reference": "b36d33b6e796513de7cb7df053afb3f55eefcd47",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=8.4"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^13.0",
+ "symfony/process": "^7.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-main": "8.3-dev"
}
},
"autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ },
+ {
+ "name": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
}
],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
- "log",
- "psr",
- "psr-3"
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "security": "https://github.com/sebastianbergmann/diff/security/policy",
+ "source": "https://github.com/sebastianbergmann/diff/tree/8.3.0"
},
- "time": "2021-05-03T11:20:27+00:00"
+ "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/diff",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-15T04:58:09+00:00"
},
{
- "name": "ralouphie/getallheaders",
- "version": "3.0.3",
+ "name": "sebastian/environment",
+ "version": "9.3.2",
"source": {
"type": "git",
- "url": "https://github.com/ralouphie/getallheaders.git",
- "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
- "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e",
+ "reference": "6c9e487c9eb706a8d258102a1c0b0a3e53e86c2e",
"shasum": ""
},
"require": {
- "php": ">=5.6"
+ "php": ">=8.4"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^5 || ^6.5"
+ "phpunit/phpunit": "^13.1.11"
+ },
+ "suggest": {
+ "ext-posix": "*"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "9.3-dev"
+ }
+ },
"autoload": {
- "files": [
- "src/getallheaders.php"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Ralph Khattar",
- "email": "ralph.khattar@gmail.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "A polyfill for getallheaders.",
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "https://github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
"support": {
- "issues": "https://github.com/ralouphie/getallheaders/issues",
- "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "security": "https://github.com/sebastianbergmann/environment/security/policy",
+ "source": "https://github.com/sebastianbergmann/environment/tree/9.3.2"
},
- "time": "2019-03-08T08:55:37+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/environment",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2026-05-25T13:41:38+00:00"
},
{
- "name": "roave/backward-compatibility-check",
- "version": "5.0.0",
+ "name": "sebastian/exporter",
+ "version": "8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/Roave/BackwardCompatibilityCheck.git",
- "reference": "15611feaa64b3b9fb8dbac3425e4d605c1f35c4f"
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "c0d29a945f8cf82f300a05e69874508e307ca4c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/BackwardCompatibilityCheck/zipball/15611feaa64b3b9fb8dbac3425e4d605c1f35c4f",
- "reference": "15611feaa64b3b9fb8dbac3425e4d605c1f35c4f",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c0d29a945f8cf82f300a05e69874508e307ca4c6",
+ "reference": "c0d29a945f8cf82f300a05e69874508e307ca4c6",
"shasum": ""
},
"require": {
- "composer/composer": "^1.10.7",
- "ext-json": "*",
- "nikolaposa/version": "^4.0.0",
- "ocramius/package-versions": "^1.8.0",
- "php": "^7.4.7",
- "roave/better-reflection": "^4.6.1",
- "symfony/console": "^5.1.2",
- "symfony/process": "^5.1.2",
- "thecodingmachine/safe": "^1.1.1",
- "webmozart/assert": "^1.9.0"
+ "ext-mbstring": "*",
+ "php": ">=8.4",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^8.0.0",
- "infection/infection": "^0.16.3",
- "phpunit/phpunit": "^9.2.5",
- "roave/security-advisories": "dev-master",
- "squizlabs/php_codesniffer": "^3.5.5",
- "vimeo/psalm": "^3.11.6"
+ "phpunit/phpunit": "^13.1.10"
},
- "bin": [
- "bin/roave-backward-compatibility-check"
- ],
"type": "library",
- "autoload": {
- "psr-4": {
- "Roave\\BackwardCompatibility\\": "src"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "8.1-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "James Titcumb",
- "email": "james@asgrim.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
},
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
+ "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": "Tool to compare two revisions of a public API to check for BC breaks",
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
"support": {
- "issues": "https://github.com/Roave/BackwardCompatibilityCheck/issues",
- "source": "https://github.com/Roave/BackwardCompatibilityCheck/tree/master"
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "security": "https://github.com/sebastianbergmann/exporter/security/policy",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/8.1.0"
},
- "time": "2020-06-22T11:14:45+00:00"
+ "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": "2026-05-21T11:50:56+00:00"
},
{
- "name": "roave/better-reflection",
- "version": "4.12.2",
+ "name": "sebastian/git-state",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/Roave/BetterReflection.git",
- "reference": "73c376c7245b2928837ed1e8bef446f57f1148a0"
+ "url": "https://github.com/sebastianbergmann/git-state.git",
+ "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/BetterReflection/zipball/73c376c7245b2928837ed1e8bef446f57f1148a0",
- "reference": "73c376c7245b2928837ed1e8bef446f57f1148a0",
+ "url": "https://api.github.com/repos/sebastianbergmann/git-state/zipball/792a952e0eba55b6960a48aeceb9f371aad1f76b",
+ "reference": "792a952e0eba55b6960a48aeceb9f371aad1f76b",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "2019.3",
- "nikic/php-parser": "^4.6.0",
- "php": ">=7.4.1,<7.5.0",
- "phpdocumentor/reflection-docblock": "^5.2.2",
- "phpdocumentor/type-resolver": "^1.4.0",
- "roave/signature": "^1.3"
+ "php": ">=8.4"
},
"require-dev": {
- "doctrine/coding-standard": "^8.2.0",
- "infection/infection": "^0.20.0",
- "phpstan/phpstan": "0.12.25",
- "phpunit/phpunit": "^9.4.4",
- "roave/infection-static-analysis-plugin": "^1.2",
- "vimeo/psalm": "^4.2"
- },
- "suggest": {
- "composer/composer": "Required to use the ComposerSourceLocator"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "1.0-dev"
}
},
"autoload": {
- "psr-4": {
- "Roave\\BetterReflection\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
],
- "authors": [
+ "description": "Library for describing the state of a Git checkout",
+ "homepage": "https://github.com/sebastianbergmann/git-state",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/git-state/issues",
+ "security": "https://github.com/sebastianbergmann/git-state/security/policy",
+ "source": "https://github.com/sebastianbergmann/git-state/tree/1.0.0"
+ },
+ "funding": [
{
- "name": "James Titcumb",
- "email": "james@asgrim.com",
- "homepage": "https://github.com/asgrim"
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
},
{
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
},
{
- "name": "Gary Hockin",
- "email": "gary@roave.com",
- "homepage": "https://github.com/geeh"
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
},
{
- "name": "Jaroslav Hanslík",
- "email": "kukulich@kukulich.cz",
- "homepage": "https://github.com/kukulich"
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/git-state",
+ "type": "tidelift"
}
],
- "description": "Better Reflection - an improved code reflection API",
- "support": {
- "issues": "https://github.com/Roave/BetterReflection/issues",
- "source": "https://github.com/Roave/BetterReflection/tree/4.12.2"
- },
- "time": "2020-12-17T17:48:54+00:00"
+ "time": "2026-03-21T12:54:28+00:00"
},
{
- "name": "roave/infection-static-analysis-plugin",
- "version": "1.7.1",
+ "name": "sebastian/global-state",
+ "version": "9.0.1",
"source": {
"type": "git",
- "url": "https://github.com/Roave/infection-static-analysis-plugin.git",
- "reference": "36d171236fa44b485538c88f56fd1f536b903036"
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/infection-static-analysis-plugin/zipball/36d171236fa44b485538c88f56fd1f536b903036",
- "reference": "36d171236fa44b485538c88f56fd1f536b903036",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ba68ba79da690cf7eddefd3ce5b78b20b9ba9945",
+ "reference": "ba68ba79da690cf7eddefd3ce5b78b20b9ba9945",
"shasum": ""
},
"require": {
- "infection/infection": "0.20.2",
- "ocramius/package-versions": "^1.9.0 || ^2.0.0",
- "php": "~7.4.7|~8.0.0",
- "vimeo/psalm": "^4.3.2"
+ "php": ">=8.4",
+ "sebastian/object-reflector": "^6.0",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^8.2.0",
- "phpunit/phpunit": "^9.5.0"
+ "ext-dom": "*",
+ "phpunit/phpunit": "^13.1.13"
},
- "bin": [
- "bin/roave-infection-static-analysis-plugin"
- ],
"type": "library",
- "autoload": {
- "psr-4": {
- "Roave\\InfectionStaticAnalysis\\": "src/Roave/InfectionStaticAnalysis"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "9.0-dev"
}
},
+ "autoload": {
+ "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"
}
],
- "description": "Static analysis on top of mutation testing - prevents escaped mutants from being invalid according to static analysis",
+ "description": "Snapshotting of global state",
+ "homepage": "https://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
"support": {
- "issues": "https://github.com/Roave/infection-static-analysis-plugin/issues",
- "source": "https://github.com/Roave/infection-static-analysis-plugin/tree/1.7.1"
+ "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/9.0.1"
},
- "time": "2021-03-04T16:33:09+00:00"
+ "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:11:33+00:00"
},
{
- "name": "roave/signature",
- "version": "1.5.0",
+ "name": "sebastian/lines-of-code",
+ "version": "5.0.1",
"source": {
"type": "git",
- "url": "https://github.com/Roave/Signature.git",
- "reference": "b100e2c40e51f3c56a0b29faf3e7ca75c33df60b"
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Roave/Signature/zipball/b100e2c40e51f3c56a0b29faf3e7ca75c33df60b",
- "reference": "b100e2c40e51f3c56a0b29faf3e7ca75c33df60b",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/d2cff273a90c79b0eb590baa682d4b5c318bdbb7",
+ "reference": "d2cff273a90c79b0eb590baa682d4b5c318bdbb7",
"shasum": ""
},
"require": {
- "php": "7.4.*|8.0.*|8.1.*"
+ "nikic/php-parser": "^5.7.0",
+ "php": ">=8.4"
},
"require-dev": {
- "doctrine/coding-standard": "^9.0",
- "infection/infection": "^0.25.1",
- "phpunit/phpunit": "^9.5.9",
- "vimeo/psalm": "^4.10.1"
+ "phpunit/phpunit": "^13.1.10"
},
"type": "library",
- "autoload": {
- "psr-4": {
- "Roave\\Signature\\": "src"
+ "extra": {
+ "branch-alias": {
+ "dev-main": "5.0-dev"
}
},
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
],
- "description": "Sign and verify stuff",
+ "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/Roave/Signature/issues",
- "source": "https://github.com/Roave/Signature/tree/1.5.0"
+ "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/5.0.1"
},
- "time": "2021-09-18T13:37:44+00:00"
+ "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:23:37+00:00"
},
{
- "name": "sanmai/pipeline",
- "version": "v5.2.1",
+ "name": "sebastian/object-enumerator",
+ "version": "8.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sanmai/pipeline.git",
- "reference": "2b5509a7635143165041109eb1c393c8515724f1"
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sanmai/pipeline/zipball/2b5509a7635143165041109eb1c393c8515724f1",
- "reference": "2b5509a7635143165041109eb1c393c8515724f1",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
+ "reference": "b39ab125fd9a7434b0ecbc4202eebce11a98cfc5",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": ">=8.4",
+ "sebastian/object-reflector": "^6.0",
+ "sebastian/recursion-context": "^8.0"
},
"require-dev": {
- "ergebnis/composer-normalize": "^2.8",
- "friendsofphp/php-cs-fixer": "^3",
- "infection/infection": ">=0.10.5",
- "league/pipeline": "^1.0 || ^0.3",
- "phan/phan": ">=1.1",
- "php-coveralls/php-coveralls": "^2.4.1",
- "phpstan/phpstan": ">=0.10",
- "phpunit/phpunit": "^7.4 || ^8.1 || ^9.4",
- "vimeo/psalm": ">=2"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "v5.x-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
- "files": [
- "src/functions.php"
- ],
- "psr-4": {
- "Pipeline\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "Apache-2.0"
+ "BSD-3-Clause"
],
"authors": [
{
- "name": "Alexey Kopytko",
- "email": "alexey@kopytko.com"
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
}
],
- "description": "General-purpose collections pipeline",
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
"support": {
- "issues": "https://github.com/sanmai/pipeline/issues",
- "source": "https://github.com/sanmai/pipeline/tree/v5.2.1"
+ "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/8.0.0"
},
"funding": [
{
- "url": "https://github.com/sanmai",
+ "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/object-enumerator",
+ "type": "tidelift"
}
],
- "time": "2021-11-01T10:09:55+00:00"
+ "time": "2026-02-06T04:46:36+00:00"
},
{
- "name": "sebastian/cli-parser",
- "version": "1.0.1",
+ "name": "sebastian/object-reflector",
+ "version": "6.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/cli-parser.git",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2"
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2",
- "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
+ "reference": "3ca042c2c60b0eab094f8a1b6a7093f4d4c72200",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "6.0-dev"
}
},
"autoload": {
@@ -6418,48 +6509,60 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "email": "sebastian@phpunit.de"
}
],
- "description": "Library for parsing CLI options",
- "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "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/cli-parser/issues",
- "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1"
+ "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/6.0.0"
},
"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/object-reflector",
+ "type": "tidelift"
}
],
- "time": "2020-09-28T06:08:49+00:00"
+ "time": "2026-02-06T04:47:13+00:00"
},
{
- "name": "sebastian/code-unit",
- "version": "1.0.8",
+ "name": "sebastian/recursion-context",
+ "version": "8.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit.git",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
- "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/74c5af21f6a5833e91767ca068c4d3dfec15317e",
+ "reference": "74c5af21f6a5833e91767ca068c4d3dfec15317e",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^13.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-main": "8.0-dev"
}
},
"autoload": {
@@ -6474,48 +6577,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": "Collection of value objects that represent the PHP code units",
- "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
"support": {
- "issues": "https://github.com/sebastianbergmann/code-unit/issues",
- "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ "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/8.0.0"
},
"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": "2020-10-26T13:08:54+00:00"
+ "time": "2026-02-06T04:51:28+00:00"
},
{
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "2.0.3",
+ "name": "sebastian/type",
+ "version": "7.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "fee0309275847fefd7636167085e379c1dbf6990"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
- "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fee0309275847fefd7636167085e379c1dbf6990",
+ "reference": "fee0309275847fefd7636167085e379c1dbf6990",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.4"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^13.1.10"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -6530,49 +6653,58 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "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/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "security": "https://github.com/sebastianbergmann/type/security/policy",
+ "source": "https://github.com/sebastianbergmann/type/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/type",
+ "type": "tidelift"
}
],
- "time": "2020-09-28T05:30:19+00:00"
+ "time": "2026-05-20T06:49:11+00:00"
},
{
- "name": "sebastian/comparator",
- "version": "4.0.6",
+ "name": "sebastian/version",
+ "version": "7.0.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382"
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382",
- "reference": "55f4261989e546dc112258c7a75935a81a7ce382",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/ad37a5552c8e2b88572249fdc19b6da7792e021b",
+ "reference": "ad37a5552c8e2b88572249fdc19b6da7792e021b",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/diff": "^4.0",
- "sebastian/exporter": "^4.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3"
+ "php": ">=8.4"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-main": "7.0-dev"
}
},
"autoload": {
@@ -6587,854 +6719,984 @@
"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"
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
}
],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
+ "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/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6"
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "security": "https://github.com/sebastianbergmann/version/security/policy",
+ "source": "https://github.com/sebastianbergmann/version/tree/7.0.0"
},
"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/version",
+ "type": "tidelift"
}
],
- "time": "2020-10-26T15:49:45+00:00"
+ "time": "2026-02-06T04:52:52+00:00"
},
{
- "name": "sebastian/complexity",
- "version": "2.0.2",
+ "name": "seld/jsonlint",
+ "version": "1.12.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/complexity.git",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "9a90eb5d32d5a500296bf43f946d60246444d5f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
- "reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/9a90eb5d32d5a500296bf43f946d60246444d5f7",
+ "reference": "9a90eb5d32d5a500296bf43f946d60246444d5f7",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.7",
- "php": ">=7.3"
+ "php": "^5.3 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpstan/phpstan": "^1.11",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
},
+ "bin": [
+ "bin/jsonlint"
+ ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
}
],
- "description": "Library for calculating the complexity of PHP code units",
- "homepage": "https://github.com/sebastianbergmann/complexity",
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/complexity/issues",
- "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2"
+ "issues": "https://github.com/Seldaek/jsonlint/issues",
+ "source": "https://github.com/Seldaek/jsonlint/tree/1.12.1"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/Seldaek",
"type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
}
],
- "time": "2020-10-26T15:52:27+00:00"
+ "time": "2026-06-12T11:32:29+00:00"
},
{
- "name": "sebastian/diff",
- "version": "4.0.4",
+ "name": "seld/phar-utils",
+ "version": "1.2.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d"
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d",
- "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
"shasum": ""
},
"require": {
- "php": ">=7.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
+ "php": ">=5.3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.0-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
}
],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
+ "description": "PHAR file format utilities, for when PHP phars you up",
"keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
+ "phar"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4"
+ "issues": "https://github.com/Seldaek/phar-utils/issues",
+ "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-10-26T13:10:38+00:00"
+ "time": "2022-08-31T10:31:18+00:00"
},
{
- "name": "sebastian/environment",
- "version": "5.1.3",
+ "name": "seld/signal-handler",
+ "version": "2.0.2",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac"
+ "url": "https://github.com/Seldaek/signal-handler.git",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac",
- "reference": "388b6ced16caa751030f6a69e588299fa09200ac",
+ "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=7.2.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-posix": "*"
+ "phpstan/phpstan": "^1",
+ "phpstan/phpstan-deprecation-rules": "^1.0",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpstan/phpstan-strict-rules": "^1.3",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23",
+ "psr/log": "^1 || ^2 || ^3"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.1-dev"
+ "dev-main": "2.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Seld\\Signal\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development",
"keywords": [
- "Xdebug",
- "environment",
- "hhvm"
+ "posix",
+ "sigint",
+ "signal",
+ "sigterm",
+ "unix"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3"
+ "issues": "https://github.com/Seldaek/signal-handler/issues",
+ "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-09-28T05:52:38+00:00"
+ "time": "2023-09-03T09:24:00+00:00"
},
{
- "name": "sebastian/exporter",
- "version": "4.0.4",
+ "name": "shipmonk/dead-code-detector",
+ "version": "1.2.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
+ "url": "https://github.com/shipmonk-rnd/dead-code-detector.git",
+ "reference": "b2f49bbcf6246c2058b2b7c6770bc6db06def5b2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
- "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
+ "url": "https://api.github.com/repos/shipmonk-rnd/dead-code-detector/zipball/b2f49bbcf6246c2058b2b7c6770bc6db06def5b2",
+ "reference": "b2f49bbcf6246c2058b2b7c6770bc6db06def5b2",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/recursion-context": "^4.0"
+ "php": "^8.1",
+ "phpstan/phpstan": "^2.1.41"
},
"require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^9.3"
+ "behat/behat": "^3.14",
+ "composer-runtime-api": "^2.0",
+ "composer/semver": "^3.4",
+ "doctrine/orm": "^2.19 || ^3.0",
+ "editorconfig-checker/editorconfig-checker": "^10.7.0",
+ "ergebnis/composer-normalize": "^2.48.1",
+ "laravel/framework": "^10.0 || ^11.0 || ^12.0",
+ "nette/application": "^3.1",
+ "nette/component-model": "^3.0",
+ "nette/neon": "^3.4",
+ "nette/tester": "^2.4",
+ "nette/utils": "^3.0 || ^4.0",
+ "nikic/php-parser": "^5.4.0",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/phpstan-phpunit": "^2.0.16",
+ "phpstan/phpstan-strict-rules": "^2.0.10",
+ "phpstan/phpstan-symfony": "^2.0.15",
+ "phpunit/phpcov": "^9.0.2",
+ "phpunit/phpunit": "^10.5.46",
+ "shipmonk/coding-standard": "^0.2.2",
+ "shipmonk/composer-dependency-analyser": "^1.8.4",
+ "shipmonk/coverage-guard": "^1.0.2",
+ "shipmonk/name-collision-detector": "^2.1.1",
+ "shipmonk/phpstan-dev": "^0.1.6",
+ "shipmonk/phpstan-rules": "^4.3.6",
+ "symfony/contracts": "^2.5 || ^3.0 || ^4.0",
+ "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/form": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/routing": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "symfony/scheduler": "^6.3 || ^7.0 || ^8.0",
+ "symfony/ux-live-component": "^2.34",
+ "symfony/ux-twig-component": "^2.34",
+ "symfony/validator": "^5.4 || ^6.0 || ^7.0 || ^8.0",
+ "twig/twig": "^3.0"
},
- "type": "library",
+ "type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
+ "phpstan": {
+ "includes": [
+ "rules.neon"
+ ]
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "ShipMonk\\PHPStan\\DeadCode\\": "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"
- }
+ "MIT"
],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "description": "Dead code detector to find unused PHP code via PHPStan extension. Can automatically remove dead PHP code. Supports libraries like Symfony, Doctrine, PHPUnit etc. Detects dead cycles. Can detect dead code that is tested.",
"keywords": [
- "export",
- "exporter"
+ "PHPStan",
+ "dead code",
+ "static analysis",
+ "unused code"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
+ "issues": "https://github.com/shipmonk-rnd/dead-code-detector/issues",
+ "source": "https://github.com/shipmonk-rnd/dead-code-detector/tree/1.2.1"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-11-11T14:18:36+00:00"
+ "time": "2026-06-12T07:26:41+00:00"
},
{
- "name": "sebastian/global-state",
- "version": "5.0.5",
+ "name": "shipmonk/phpstan-rules",
+ "version": "4.4.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ "url": "https://github.com/shipmonk-rnd/phpstan-rules.git",
+ "reference": "5c972b16fa6d202d0d0d2c888e29f7d9fc0a9908"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "url": "https://api.github.com/repos/shipmonk-rnd/phpstan-rules/zipball/5c972b16fa6d202d0d0d2c888e29f7d9fc0a9908",
+ "reference": "5c972b16fa6d202d0d0d2c888e29f7d9fc0a9908",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "php": "^8.1",
+ "phpstan/phpstan": "^2.1.33"
},
"require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^9.3"
- },
- "suggest": {
- "ext-uopz": "*"
+ "editorconfig-checker/editorconfig-checker": "^10.6.0",
+ "ergebnis/composer-normalize": "^2.45.0",
+ "phpstan/phpstan-deprecation-rules": "^2.0.1",
+ "phpstan/phpstan-phpunit": "^2.0.4",
+ "phpstan/phpstan-strict-rules": "^2.0.3",
+ "phpunit/phpunit": "^10.5.46",
+ "shipmonk/coding-standard": "^0.2.0",
+ "shipmonk/composer-dependency-analyser": "^1.8.1",
+ "shipmonk/coverage-guard": "^1.0.0",
+ "shipmonk/dead-code-detector": "^1.0",
+ "shipmonk/name-collision-detector": "^2.1.1",
+ "shipmonk/phpstan-dev": "^0.1.5"
},
- "type": "library",
+ "type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "5.0-dev"
+ "phpstan": {
+ "includes": [
+ "rules.neon"
+ ]
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "ShipMonk\\PHPStan\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
+ "MIT"
],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "description": "Various extra strict PHPStan rules we found useful in ShipMonk.",
"keywords": [
- "global state"
+ "PHPStan",
+ "static analysis"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ "issues": "https://github.com/shipmonk-rnd/phpstan-rules/issues",
+ "source": "https://github.com/shipmonk-rnd/phpstan-rules/tree/4.4.0"
},
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2022-02-14T08:28:10+00:00"
+ "time": "2026-05-18T12:07:24+00:00"
},
{
- "name": "sebastian/lines-of-code",
- "version": "1.0.3",
+ "name": "slevomat/coding-standard",
+ "version": "8.29.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/lines-of-code.git",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
- "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/81fce13c4ef4b53a03e5cfa6ce36afc191c1598e",
+ "reference": "81fce13c4ef4b53a03e5cfa6ce36afc191c1598e",
"shasum": ""
},
"require": {
- "nikic/php-parser": "^4.6",
- "php": ">=7.3"
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.1",
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpdoc-parser": "^2.3.2",
+ "squizlabs/php_codesniffer": "^4.0.1"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phing/phing": "3.0.1|3.1.2",
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "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.34|10.5.63|11.4.4|11.5.55|12.5.24"
},
- "type": "library",
+ "type": "phpcodesniffer-standard",
"extra": {
"branch-alias": {
- "dev-master": "1.0-dev"
+ "dev-master": "8.x-dev"
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
+ "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "keywords": [
+ "dev",
+ "phpcs"
],
- "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",
- "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3"
+ "issues": "https://github.com/slevomat/coding-standard/issues",
+ "source": "https://github.com/slevomat/coding-standard/tree/8.29.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/kukulich",
"type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
}
],
- "time": "2020-11-28T06:42:11+00:00"
+ "time": "2026-05-07T05:48:08+00:00"
},
{
- "name": "sebastian/object-enumerator",
- "version": "4.0.4",
+ "name": "squizlabs/php_codesniffer",
+ "version": "4.0.1",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "0525c73950de35ded110cffafb9892946d7771b5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
- "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0525c73950de35ded110cffafb9892946d7771b5",
+ "reference": "0525c73950de35ded110cffafb9892946d7771b5",
"shasum": ""
},
"require": {
- "php": ">=7.3",
- "sebastian/object-reflector": "^2.0",
- "sebastian/recursion-context": "^4.0"
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=7.2.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31"
},
+ "bin": [
+ "bin/phpcbf",
+ "bin/phpcs"
+ ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "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": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "keywords": [
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ "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/sebastianbergmann",
+ "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-10-26T13:12:34+00:00"
+ "time": "2025-11-10T16:43:36+00:00"
},
{
- "name": "sebastian/object-reflector",
- "version": "2.0.4",
+ "name": "staabm/phpstan-psr3",
+ "version": "1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ "url": "https://github.com/staabm/phpstan-psr3.git",
+ "reference": "eb28b6f4cde754a8950547d633fc983cbfc59651"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
- "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "url": "https://api.github.com/repos/staabm/phpstan-psr3/zipball/eb28b6f4cde754a8950547d633fc983cbfc59651",
+ "reference": "eb28b6f4cde754a8950547d633fc983cbfc59651",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "illuminate/log": "^8 || ^9 || ^10 || ^11 || ^12",
+ "illuminate/support": "^8 || ^9 || ^10 || ^11 || ^12",
+ "monolog/monolog": "^2 || ^3.9",
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan-deprecation-rules": "^2.0.1",
+ "phpstan/phpstan-phpunit": "^2.0.6",
+ "phpstan/phpstan-strict-rules": "^2.0.4",
+ "phpunit/phpunit": "^9 || ^10.5.45",
+ "redaxo/source": "^5",
+ "symplify/easy-coding-standard": "^12.5.11",
+ "tomasvotruba/unused-public": "^2.0.1"
},
- "type": "library",
+ "type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
+ "phpstan": {
+ "includes": [
+ "config/extension.neon"
+ ]
}
},
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "staabm\\PHPStanPsr3\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
+ "keywords": [
+ "PHPStan",
+ "dev",
+ "monolog",
+ "phpstan-extension",
+ "psr-3",
+ "psr-log",
+ "static analysis"
],
- "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",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
+ "issues": "https://github.com/staabm/phpstan-psr3/issues",
+ "source": "https://github.com/staabm/phpstan-psr3/tree/1.0.3"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/staabm",
"type": "github"
}
],
- "time": "2020-10-26T13:14:26+00:00"
+ "time": "2025-04-22T16:20:54+00:00"
},
{
- "name": "sebastian/recursion-context",
- "version": "4.0.4",
+ "name": "staabm/side-effects-detector",
+ "version": "1.0.5",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172"
+ "url": "https://github.com/staabm/side-effects-detector.git",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172",
- "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172",
+ "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163",
+ "reference": "d8334211a140ce329c13726d4a715adbddd0a163",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "ext-tokenizer": "*",
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "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": "4.0-dev"
- }
- },
"autoload": {
"classmap": [
- "src/"
+ "lib/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
+ "description": "A static analysis tool to detect side effects in PHP code",
+ "keywords": [
+ "static analysis"
],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
"support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4"
+ "issues": "https://github.com/staabm/side-effects-detector/issues",
+ "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/staabm",
"type": "github"
}
],
- "time": "2020-10-26T13:17:30+00:00"
+ "time": "2024-10-20T05:08:20+00:00"
},
{
- "name": "sebastian/resource-operations",
- "version": "3.0.3",
+ "name": "symfony/config",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8"
+ "url": "https://github.com/symfony/config.git",
+ "reference": "429783a0c649696f2058ea5ab5315f082dba6de9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
- "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8",
+ "url": "https://api.github.com/repos/symfony/config/zipball/429783a0c649696f2058ea5ab5315f082dba6de9",
+ "reference": "429783a0c649696f2058ea5ab5315f082dba6de9",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/filesystem": "^7.4|^8.0",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/service-contracts": "<2.5"
},
"require-dev": {
- "phpunit/phpunit": "^9.0"
+ "symfony/event-dispatcher": "^7.4|^8.0",
+ "symfony/finder": "^7.4|^8.0",
+ "symfony/messenger": "^7.4|^8.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/yaml": "^7.4|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
+ "psr-4": {
+ "Symfony\\Component\\Config\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "homepage": "https://symfony.com",
"support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3"
+ "source": "https://github.com/symfony/config/tree/v8.1.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "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-09-28T06:45:17+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "sebastian/type",
- "version": "2.3.4",
+ "name": "symfony/console",
+ "version": "v7.4.13",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914"
+ "url": "https://github.com/symfony/console.git",
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914",
- "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914",
+ "url": "https://api.github.com/repos/symfony/console/zipball/85095d2573eaefaf35e40b9513a9bf09f72cd217",
+ "reference": "85095d2573eaefaf35e40b9513a9bf09f72cd217",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.2",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/service-contracts": "^2.5|^3",
+ "symfony/string": "^7.2|^8.0"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<6.4",
+ "symfony/dotenv": "<6.4",
+ "symfony/event-dispatcher": "<6.4",
+ "symfony/lock": "<6.4",
+ "symfony/process": "<6.4"
+ },
+ "provide": {
+ "psr/log-implementation": "1.0|2.0|3.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3"
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^6.4|^7.0|^8.0",
+ "symfony/dependency-injection": "^6.4|^7.0|^8.0",
+ "symfony/event-dispatcher": "^6.4|^7.0|^8.0",
+ "symfony/http-foundation": "^6.4|^7.0|^8.0",
+ "symfony/http-kernel": "^6.4|^7.0|^8.0",
+ "symfony/lock": "^6.4|^7.0|^8.0",
+ "symfony/messenger": "^6.4|^7.0|^8.0",
+ "symfony/process": "^6.4|^7.0|^8.0",
+ "symfony/stopwatch": "^6.4|^7.0|^8.0",
+ "symfony/var-dumper": "^6.4|^7.0|^8.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
"support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/2.3.4"
+ "source": "https://github.com/symfony/console/tree/v7.4.13"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "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": "2021-06-15T12:49:02+00:00"
+ "time": "2026-05-24T08:56:14+00:00"
},
{
- "name": "sebastian/version",
- "version": "3.0.2",
+ "name": "symfony/dependency-injection",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ "url": "https://github.com/symfony/dependency-injection.git",
+ "reference": "b6ba1f45127106885de4b77558c5ecca8feb1e1b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
- "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b6ba1f45127106885de4b77558c5ecca8feb1e1b",
+ "reference": "b6ba1f45127106885de4b77558c5ecca8feb1e1b",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": ">=8.4.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/service-contracts": "^3.6",
+ "symfony/var-exporter": "^8.1"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "provide": {
+ "psr/container-implementation": "1.1|2.0",
+ "symfony/service-implementation": "1.1|2.0|3.0"
},
+ "require-dev": {
+ "symfony/config": "^7.4|^8.0",
+ "symfony/expression-language": "^7.4|^8.0",
+ "symfony/yaml": "^7.4|^8.0"
+ },
+ "type": "library",
"autoload": {
- "classmap": [
- "src/"
+ "psr-4": {
+ "Symfony\\Component\\DependencyInjection\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
+ "description": "Allows you to standardize and centralize the way objects are constructed in your application",
+ "homepage": "https://symfony.com",
"support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ "source": "https://github.com/symfony/dependency-injection/tree/v8.1.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "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-09-28T06:39:44+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "seld/jsonlint",
- "version": "1.9.0",
+ "name": "symfony/deprecation-contracts",
+ "version": "v3.7.0",
"source": {
"type": "git",
- "url": "https://github.com/Seldaek/jsonlint.git",
- "reference": "4211420d25eba80712bff236a98960ef68b866b7"
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/4211420d25eba80712bff236a98960ef68b866b7",
- "reference": "4211420d25eba80712bff236a98960ef68b866b7",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/50f59d1f3ca46d41ac911f97a78626b6756af35b",
+ "reference": "50f59d1f3ca46d41ac911f97a78626b6756af35b",
"shasum": ""
},
"require": {
- "php": "^5.3 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.5",
- "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
+ "php": ">=8.1"
},
- "bin": [
- "bin/jsonlint"
- ],
"type": "library",
- "autoload": {
- "psr-4": {
- "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
}
},
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
"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"
+ "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": {
- "issues": "https://github.com/Seldaek/jsonlint/issues",
- "source": "https://github.com/Seldaek/jsonlint/tree/1.9.0"
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v3.7.0"
},
"funding": [
{
- "url": "https://github.com/Seldaek",
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2022-04-01T13:37:23+00:00"
+ "time": "2026-04-13T15:52:40+00:00"
},
{
- "name": "seld/phar-utils",
- "version": "1.2.0",
+ "name": "symfony/filesystem",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/Seldaek/phar-utils.git",
- "reference": "9f3452c93ff423469c0d56450431562ca423dcee"
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/9f3452c93ff423469c0d56450431562ca423dcee",
- "reference": "9f3452c93ff423469c0d56450431562ca423dcee",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/99aec13b82b4967ec5088222c4a3ecca955949c2",
+ "reference": "99aec13b82b4967ec5088222c4a3ecca955949c2",
"shasum": ""
},
"require": {
- "php": ">=5.3"
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
+ "require-dev": {
+ "symfony/process": "^7.4|^8.0"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "Seld\\PharUtils\\": "src/"
- }
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -7442,179 +7704,229 @@
],
"authors": [
{
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "description": "PHAR file format utilities, for when PHP phars you up",
- "keywords": [
- "phar"
- ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
"support": {
- "issues": "https://github.com/Seldaek/phar-utils/issues",
- "source": "https://github.com/Seldaek/phar-utils/tree/1.2.0"
+ "source": "https://github.com/symfony/filesystem/tree/v8.1.0"
},
- "time": "2021-12-10T11:20:11+00:00"
+ "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-29T05:06:50+00:00"
},
{
- "name": "slevomat/coding-standard",
- "version": "7.0.18",
+ "name": "symfony/finder",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/slevomat/coding-standard.git",
- "reference": "b81ac84f41a4797dc25c8ede1b0718e2a74be0fc"
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "58d2e767a66052c1487356f953445634a8194c64"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/b81ac84f41a4797dc25c8ede1b0718e2a74be0fc",
- "reference": "b81ac84f41a4797dc25c8ede1b0718e2a74be0fc",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/58d2e767a66052c1487356f953445634a8194c64",
+ "reference": "58d2e767a66052c1487356f953445634a8194c64",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7",
- "php": "^7.1 || ^8.0",
- "phpstan/phpdoc-parser": "^1.0.0",
- "squizlabs/php_codesniffer": "^3.6.1"
+ "php": ">=8.4.1"
},
"require-dev": {
- "phing/phing": "2.17.0",
- "php-parallel-lint/php-parallel-lint": "1.3.1",
- "phpstan/phpstan": "1.2.0",
- "phpstan/phpstan-deprecation-rules": "1.0.0",
- "phpstan/phpstan-phpunit": "1.0.0",
- "phpstan/phpstan-strict-rules": "1.1.0",
- "phpunit/phpunit": "7.5.20|8.5.21|9.5.10"
- },
- "type": "phpcodesniffer-standard",
- "extra": {
- "branch-alias": {
- "dev-master": "7.x-dev"
- }
+ "symfony/filesystem": "^7.4|^8.0"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "SlevomatCodingStandard\\": "SlevomatCodingStandard"
- }
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.",
+ "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": {
- "issues": "https://github.com/slevomat/coding-standard/issues",
- "source": "https://github.com/slevomat/coding-standard/tree/7.0.18"
+ "source": "https://github.com/symfony/finder/tree/v8.1.0"
},
"funding": [
{
- "url": "https://github.com/kukulich",
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
"type": "github"
},
{
- "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2021-12-07T17:19:06+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "squizlabs/php_codesniffer",
- "version": "3.6.2",
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.37.0",
"source": {
"type": "git",
- "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a"
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/5e4e71592f69da17871dba6e80dd51bce74a351a",
- "reference": "5e4e71592f69da17871dba6e80dd51bce74a351a",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2",
+ "reference": "141046a8f9477948ff284fa65be2095baafb94f2",
"shasum": ""
},
"require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
+ "php": ">=7.2"
},
- "require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
},
- "bin": [
- "bin/phpcs",
- "bin/phpcbf"
- ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Greg Sherwood",
- "role": "lead"
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
}
],
- "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",
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
"keywords": [
- "phpcs",
- "standards"
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
],
"support": {
- "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues",
- "source": "https://github.com/squizlabs/PHP_CodeSniffer",
- "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.37.0"
},
- "time": "2021-12-12T21:44:58+00:00"
+ "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": "symfony/config",
- "version": "v5.4.3",
+ "name": "symfony/polyfill-deepclone",
+ "version": "v1.40.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/config.git",
- "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f"
+ "url": "https://github.com/symfony/polyfill-deepclone.git",
+ "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/d65e1bd990c740e31feb07d2b0927b8d4df9956f",
- "reference": "d65e1bd990c740e31feb07d2b0927b8d4df9956f",
+ "url": "https://api.github.com/repos/symfony/polyfill-deepclone/zipball/dca4ccba5f360070b574414dce4c1e7a559844fa",
+ "reference": "dca4ccba5f360070b574414dce4c1e7a559844fa",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/filesystem": "^4.4|^5.0|^6.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.16",
- "symfony/polyfill-php81": "^1.22"
- },
- "conflict": {
- "symfony/finder": "<4.4"
+ "php": ">=8.1"
},
- "require-dev": {
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/finder": "^4.4|^5.0|^6.0",
- "symfony/messenger": "^4.4|^5.0|^6.0",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/yaml": "^4.4|^5.0|^6.0"
+ "provide": {
+ "ext-deepclone": "*"
},
"suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
+ "ext-deepclone": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Config\\": ""
+ "Symfony\\Polyfill\\DeepClone\\": ""
},
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -7623,18 +7935,25 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
+ "description": "Symfony polyfill for the deepclone extension",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "deepclone",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "source": "https://github.com/symfony/config/tree/v5.4.3"
+ "source": "https://github.com/symfony/polyfill-deepclone/tree/v1.40.0"
},
"funding": [
{
@@ -7645,70 +7964,51 @@
"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": "2022-01-03T09:50:52+00:00"
+ "time": "2026-06-12T07:27:17+00:00"
},
{
- "name": "symfony/console",
- "version": "v5.4.7",
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.38.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6"
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/900275254f0a1a2afff1ab0e11abd5587a10e1d6",
- "reference": "900275254f0a1a2afff1ab0e11abd5587a10e1d6",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/e9247d281d694a5120554d9afaf54e070e88a603",
+ "reference": "e9247d281d694a5120554d9afaf54e070e88a603",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.9",
- "symfony/polyfill-php80": "^1.16",
- "symfony/service-contracts": "^1.1|^2|^3",
- "symfony/string": "^5.1|^6.0"
- },
- "conflict": {
- "psr/log": ">=3",
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0|2.0"
- },
- "require-dev": {
- "psr/log": "^1|^2",
- "symfony/config": "^4.4|^5.0|^6.0",
- "symfony/dependency-injection": "^4.4|^5.0|^6.0",
- "symfony/event-dispatcher": "^4.4|^5.0|^6.0",
- "symfony/lock": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/var-dumper": "^4.4|^5.0|^6.0"
+ "php": ">=7.2"
},
"suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
+ "ext-intl": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -7716,24 +8016,26 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Eases the creation of beautiful and testable command line interfaces",
+ "description": "Symfony polyfill for intl's grapheme_* functions",
"homepage": "https://symfony.com",
"keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.4.7"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.38.1"
},
"funding": [
{
@@ -7744,43 +8046,53 @@
"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": "2022-03-31T17:09:19+00:00"
+ "time": "2026-05-26T05:58:03+00:00"
},
{
- "name": "symfony/deprecation-contracts",
- "version": "v2.5.2",
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.38.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
- "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/2d446c214bdbe5b71bde5011b060a05fece3ae6b",
+ "reference": "2d446c214bdbe5b71bde5011b060a05fece3ae6b",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
"files": [
- "function.php"
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -7797,10 +8109,18 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "A generic function and convention to trigger deprecation notices",
+ "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/deprecation-contracts/tree/v2.5.2"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.38.0"
},
"funding": [
{
@@ -7811,41 +8131,55 @@
"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": "2022-01-02T09:53:40+00:00"
+ "time": "2026-05-25T13:48:31+00:00"
},
{
- "name": "symfony/filesystem",
- "version": "v5.4.7",
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.38.2",
"source": {
"type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f"
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/3a4442138d80c9f7b600fb297534ac718b61d37f",
- "reference": "3a4442138d80c9f7b600fb297534ac718b61d37f",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
+ "reference": "d3d318bad5e7a1bfbd026009c8bfb8d8f99ae6b6",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "ext-iconv": "*",
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -7853,18 +8187,25 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides basic utilities for the filesystem",
+ "description": "Symfony polyfill for the Mbstring extension",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.7"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.38.2"
},
"funding": [
{
@@ -7875,39 +8216,50 @@
"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": "2022-04-01T12:33:59+00:00"
+ "time": "2026-05-27T06:59:30+00:00"
},
{
- "name": "symfony/finder",
- "version": "v5.4.3",
+ "name": "symfony/polyfill-php73",
+ "version": "v1.37.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/finder.git",
- "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d"
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/231313534dded84c7ecaa79d14bc5da4ccb69b7d",
- "reference": "231313534dded84c7ecaa79d14bc5da4ccb69b7d",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=7.2"
},
"type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
"autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Finder\\": ""
+ "Symfony\\Polyfill\\Php73\\": ""
},
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "Resources/stubs"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -7916,18 +8268,24 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Finds files and directories via an intuitive fluent interface",
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
"homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
"support": {
- "source": "https://github.com/symfony/finder/tree/v5.4.3"
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.37.0"
},
"funding": [
{
@@ -7938,44 +8296,39 @@
"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": "2022-01-26T16:34:36+00:00"
+ "time": "2024-09-09T11:45:10+00:00"
},
{
- "name": "symfony/polyfill-ctype",
- "version": "v1.25.0",
+ "name": "symfony/polyfill-php80",
+ "version": "v1.37.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab"
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
- "reference": "30885182c981ab175d4d034db0f6f469898070ab",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
+ "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-ctype": "*"
- },
- "suggest": {
- "ext-ctype": "For best performance"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -7983,8 +8336,11 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- }
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -7992,24 +8348,28 @@
],
"authors": [
{
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for ctype functions",
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "ctype",
"polyfill",
- "portable"
+ "portable",
+ "shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.37.0"
},
"funding": [
{
@@ -8020,41 +8380,39 @@
"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": "2021-10-20T20:35:02+00:00"
+ "time": "2026-04-10T16:19:22+00:00"
},
{
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.25.0",
+ "name": "symfony/polyfill-php81",
+ "version": "v1.38.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783"
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783",
- "reference": "81b86b50cf841a64252b439e738e97f4a34e2783",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
+ "reference": "6bfb9c766cacffbc8e118cb87217d08ed84e5cd7",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -8062,8 +8420,11 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- }
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8079,18 +8440,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for intl's grapheme_* functions",
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "grapheme",
- "intl",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.25.0"
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.38.1"
},
"funding": [
{
@@ -8101,41 +8460,39 @@
"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": "2021-11-23T21:10:46+00:00"
+ "time": "2026-05-26T12:45:58+00:00"
},
{
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.26.0",
+ "name": "symfony/polyfill-php84",
+ "version": "v1.38.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "219aa369ceff116e673852dce47c3a41794c14bd"
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd",
- "reference": "219aa369ceff116e673852dce47c3a41794c14bd",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
+ "reference": "f4e1dfaee5b74aba5964fe1fd4dfc7ba5e3085fa",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.26-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -8143,7 +8500,7 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ "Symfony\\Polyfill\\Php84\\": ""
},
"classmap": [
"Resources/stubs"
@@ -8163,18 +8520,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "intl",
- "normalizer",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0"
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.38.1"
},
"funding": [
{
@@ -8185,44 +8540,39 @@
"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": "2022-05-24T11:49:31+00:00"
+ "time": "2026-05-26T12:51:13+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.26.0",
+ "name": "symfony/polyfill-php85",
+ "version": "v1.38.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e"
+ "url": "https://github.com/symfony/polyfill-php85.git",
+ "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
- "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
+ "reference": "ba2ba04f3352cfa2dcbbcb90aee13ed967f505b1",
"shasum": ""
},
"require": {
- "php": ">=7.1"
- },
- "provide": {
- "ext-mbstring": "*"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
+ "php": ">=7.2"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "1.26-dev"
- },
"thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
}
},
"autoload": {
@@ -8230,8 +8580,11 @@
"bootstrap.php"
],
"psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
+ "Symfony\\Polyfill\\Php85\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8247,17 +8600,16 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
+ "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
- "mbstring",
"polyfill",
"portable",
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0"
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.38.1"
},
"funding": [
{
@@ -8268,49 +8620,41 @@
"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": "2022-05-24T11:49:31+00:00"
+ "time": "2026-05-26T02:25:22+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.25.0",
+ "name": "symfony/process",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5"
+ "url": "https://github.com/symfony/process.git",
+ "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5",
- "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/c4a9e58f235a6bf7f97ffbfedae2687353ac79e5",
+ "reference": "c4a9e58f235a6bf7f97ffbfedae2687353ac79e5",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.4.1"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
+ "Symfony\\Component\\Process\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -8319,24 +8663,18 @@
],
"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 backporting some PHP 7.3+ features to lower PHP versions",
+ "description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.25.0"
+ "source": "https://github.com/symfony/process/tree/v8.1.0"
},
"funding": [
{
@@ -8347,49 +8685,46 @@
"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": "2021-06-05T21:20:04+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.25.0",
+ "name": "symfony/property-access",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c"
+ "url": "https://github.com/symfony/property-access.git",
+ "reference": "9261ef060f26cc7b728f67f141ba19b98a6209a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/4407588e0d3f1f52efb65fbe92babe41f37fe50c",
- "reference": "4407588e0d3f1f52efb65fbe92babe41f37fe50c",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/9261ef060f26cc7b728f67f141ba19b98a6209a9",
+ "reference": "9261ef060f26cc7b728f67f141ba19b98a6209a9",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.4.1",
+ "symfony/property-info": "^7.4.4|^8.0.4"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
+ "require-dev": {
+ "symfony/cache": "^7.4|^8.0",
+ "symfony/var-exporter": "^7.4|^8.0"
},
+ "type": "library",
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
+ "Symfony\\Component\\PropertyAccess\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -8398,28 +8733,29 @@
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "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 backporting some PHP 8.0+ features to lower PHP versions",
+ "description": "Provides functions to read and write from/to an object or array using a simple string notation",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "access",
+ "array",
+ "extraction",
+ "index",
+ "injection",
+ "object",
+ "property",
+ "property-path",
+ "reflection"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.25.0"
+ "source": "https://github.com/symfony/property-access/tree/v8.1.0"
},
"funding": [
{
@@ -8430,49 +8766,54 @@
"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": "2022-03-04T08:16:47+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "symfony/polyfill-php81",
- "version": "v1.24.0",
+ "name": "symfony/property-info",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php81.git",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f"
+ "url": "https://github.com/symfony/property-info.git",
+ "reference": "4721e8c56d0cd2378e0ef9a9899f810008b859f7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
- "reference": "5de4ba2d41b15f9bd0e19b2ab9674135813ec98f",
+ "url": "https://api.github.com/repos/symfony/property-info/zipball/4721e8c56d0cd2378e0ef9a9899f810008b859f7",
+ "reference": "4721e8c56d0cd2378e0ef9a9899f810008b859f7",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">=8.4.1",
+ "symfony/string": "^7.4|^8.0",
+ "symfony/type-info": "^7.4.7|^8.0.7"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.23-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
+ "phpdocumentor/type-resolver": "<1.5.1"
+ },
+ "require-dev": {
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
+ "phpstan/phpdoc-parser": "^1.0|^2.0",
+ "symfony/cache": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/serializer": "^7.4|^8.0"
},
+ "type": "library",
"autoload": {
- "files": [
- "bootstrap.php"
- ],
"psr-4": {
- "Symfony\\Polyfill\\Php81\\": ""
+ "Symfony\\Component\\PropertyInfo\\": ""
},
- "classmap": [
- "Resources/stubs"
+ "exclude-from-classmap": [
+ "/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -8481,24 +8822,26 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Kévin Dunglas",
+ "email": "dunglas@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "description": "Extracts information about PHP class' properties using metadata of popular sources",
"homepage": "https://symfony.com",
"keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
+ "doctrine",
+ "phpdoc",
+ "property",
+ "symfony",
+ "type",
+ "validator"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php81/tree/v1.24.0"
+ "source": "https://github.com/symfony/property-info/tree/v8.1.0"
},
"funding": [
{
@@ -8509,35 +8852,72 @@
"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": "2021-09-13T13:58:11+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "symfony/process",
- "version": "v5.4.7",
+ "name": "symfony/serializer",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/process.git",
- "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb"
+ "url": "https://github.com/symfony/serializer.git",
+ "reference": "d101886195c5f772cf7033641fe9c40c3e3969e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/38a44b2517b470a436e1c944bf9b9ba3961137fb",
- "reference": "38a44b2517b470a436e1c944bf9b9ba3961137fb",
+ "url": "https://api.github.com/repos/symfony/serializer/zipball/d101886195c5f772cf7033641fe9c40c3e3969e1",
+ "reference": "d101886195c5f772cf7033641fe9c40c3e3969e1",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "<5.2|>=7",
+ "phpdocumentor/type-resolver": "<1.5.1",
+ "symfony/property-access": "<8.1",
+ "symfony/property-info": "<7.4",
+ "symfony/type-info": "<7.4"
+ },
+ "require-dev": {
+ "phpdocumentor/reflection-docblock": "^5.2|^6.0",
+ "phpstan/phpdoc-parser": "^1.0|^2.0",
+ "seld/jsonlint": "^1.10",
+ "symfony/cache": "^7.4|^8.0",
+ "symfony/config": "^7.4|^8.0",
+ "symfony/console": "^7.4|^8.0",
+ "symfony/dependency-injection": "^7.4|^8.0",
+ "symfony/error-handler": "^7.4|^8.0",
+ "symfony/filesystem": "^7.4|^8.0",
+ "symfony/form": "^7.4|^8.0",
+ "symfony/http-foundation": "^7.4|^8.0",
+ "symfony/http-kernel": "^7.4|^8.0",
+ "symfony/messenger": "^7.4|^8.0",
+ "symfony/mime": "^7.4|^8.0",
+ "symfony/property-access": "^8.1",
+ "symfony/property-info": "^7.4|^8.0",
+ "symfony/translation-contracts": "^2.5|^3",
+ "symfony/type-info": "^7.4|^8.0",
+ "symfony/uid": "^7.4|^8.0",
+ "symfony/validator": "^7.4|^8.0",
+ "symfony/var-dumper": "^7.4|^8.0",
+ "symfony/var-exporter": "^7.4|^8.0",
+ "symfony/yaml": "^7.4|^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\Process\\": ""
+ "Symfony\\Component\\Serializer\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -8557,10 +8937,10 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Executes commands in sub-processes",
+ "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/process/tree/v5.4.7"
+ "source": "https://github.com/symfony/serializer/tree/v8.1.0"
},
"funding": [
{
@@ -8571,52 +8951,56 @@
"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": "2022-03-18T16:18:52+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v2.5.1",
+ "version": "v3.7.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c"
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
- "reference": "24d9dc654b83e91aa59f9d167b131bc3b5bea24c",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d25d82433a80eba6aa0e6c24b61d7370d99e444a",
+ "reference": "d25d82433a80eba6aa0e6c24b61d7370d99e444a",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1|^3"
+ "php": ">=8.1",
+ "psr/container": "^1.1|^2.0",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"ext-psr": "<1.1|>=2"
},
- "suggest": {
- "symfony/service-implementation": ""
- },
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "2.5-dev"
- },
"thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "3.7-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Contracts\\Service\\": ""
- }
+ },
+ "exclude-from-classmap": [
+ "/Test/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -8643,7 +9027,7 @@
"standards"
],
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.1"
+ "source": "https://github.com/symfony/service-contracts/tree/v3.7.0"
},
"funding": [
{
@@ -8654,35 +9038,55 @@
"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": "2022-03-13T20:07:29+00:00"
+ "time": "2026-03-28T09:44:51+00:00"
},
{
- "name": "symfony/stopwatch",
- "version": "v5.4.5",
+ "name": "symfony/string",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/stopwatch.git",
- "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30"
+ "url": "https://github.com/symfony/string.git",
+ "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/4d04b5c24f3c9a1a168a131f6cbe297155bc0d30",
- "reference": "4d04b5c24f3c9a1a168a131f6cbe297155bc0d30",
+ "url": "https://api.github.com/repos/symfony/string/zipball/afd5944f4005862d961efb85c8bbd5c523c4e3c9",
+ "reference": "afd5944f4005862d961efb85c8bbd5c523c4e3c9",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/service-contracts": "^1|^2|^3"
+ "php": ">=8.4.1",
+ "symfony/polyfill-ctype": "^1.8",
+ "symfony/polyfill-intl-grapheme": "^1.33",
+ "symfony/polyfill-intl-normalizer": "^1.0",
+ "symfony/polyfill-mbstring": "^1.0"
+ },
+ "conflict": {
+ "symfony/translation-contracts": "<2.5"
+ },
+ "require-dev": {
+ "symfony/emoji": "^7.4|^8.0",
+ "symfony/http-client": "^7.4|^8.0",
+ "symfony/intl": "^7.4|^8.0",
+ "symfony/translation-contracts": "^2.5|^3.0",
+ "symfony/var-exporter": "^7.4|^8.0"
},
"type": "library",
"autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
"psr-4": {
- "Symfony\\Component\\Stopwatch\\": ""
+ "Symfony\\Component\\String\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -8694,18 +9098,26 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides a way to profile code",
+ "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/stopwatch/tree/v5.4.5"
+ "source": "https://github.com/symfony/string/tree/v8.1.0"
},
"funding": [
{
@@ -8716,51 +9128,45 @@
"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": "2022-02-18T16:06:09+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "symfony/string",
- "version": "v5.4.3",
+ "name": "symfony/type-info",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10"
+ "url": "https://github.com/symfony/type-info.git",
+ "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/92043b7d8383e48104e411bc9434b260dbeb5a10",
- "reference": "92043b7d8383e48104e411bc9434b260dbeb5a10",
+ "url": "https://api.github.com/repos/symfony/type-info/zipball/9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7",
+ "reference": "9f24df8a79781b9b9f030fea7dfd2f3bd1e7e7e7",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
+ "php": ">=8.4.1",
+ "psr/container": "^1.1|^2.0"
},
"conflict": {
- "symfony/translation-contracts": ">=3.0"
+ "phpstan/phpdoc-parser": "<1.30"
},
"require-dev": {
- "symfony/error-handler": "^4.4|^5.0|^6.0",
- "symfony/http-client": "^4.4|^5.0|^6.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0|^6.0"
+ "phpstan/phpdoc-parser": "^1.30|^2.0"
},
"type": "library",
"autoload": {
- "files": [
- "Resources/functions.php"
- ],
"psr-4": {
- "Symfony\\Component\\String\\": ""
+ "Symfony\\Component\\TypeInfo\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -8772,26 +9178,28 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Mathias Arlaud",
+ "email": "mathias.arlaud@gmail.com"
+ },
+ {
+ "name": "Baptiste LEDUC",
+ "email": "baptiste.leduc@gmail.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",
+ "description": "Extracts PHP types information.",
"homepage": "https://symfony.com",
"keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
+ "PHPStan",
+ "phpdoc",
+ "symfony",
+ "type"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v5.4.3"
+ "source": "https://github.com/symfony/type-info/tree/v8.1.0"
},
"funding": [
{
@@ -8802,48 +9210,45 @@
"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": "2022-01-02T09:53:40+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "symfony/yaml",
- "version": "v5.4.3",
+ "name": "symfony/var-exporter",
+ "version": "v8.1.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "e80f87d2c9495966768310fc531b487ce64237a2"
+ "url": "https://github.com/symfony/var-exporter.git",
+ "reference": "2dd18582c5f6c024db9fc0ff9c76d873af726f34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/e80f87d2c9495966768310fc531b487ce64237a2",
- "reference": "e80f87d2c9495966768310fc531b487ce64237a2",
+ "url": "https://api.github.com/repos/symfony/var-exporter/zipball/2dd18582c5f6c024db9fc0ff9c76d873af726f34",
+ "reference": "2dd18582c5f6c024db9fc0ff9c76d873af726f34",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1|^3",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "symfony/console": "<5.3"
+ "php": ">=8.4.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-deepclone": "^1.37"
},
"require-dev": {
- "symfony/console": "^5.3|^6.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
+ "symfony/property-access": "^7.4|^8.0",
+ "symfony/serializer": "^7.4|^8.0",
+ "symfony/var-dumper": "^7.4|^8.0"
},
- "bin": [
- "Resources/bin/yaml-lint"
- ],
"type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\Yaml\\": ""
+ "Symfony\\Component\\VarExporter\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -8855,18 +9260,29 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Loads and dumps YAML files",
+ "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/yaml/tree/v5.4.3"
+ "source": "https://github.com/symfony/var-exporter/tree/v8.1.0"
},
"funding": [
{
@@ -8877,144 +9293,236 @@
"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": "2022-01-26T16:32:32+00:00"
+ "time": "2026-05-29T05:06:50+00:00"
},
{
- "name": "thecodingmachine/phpstan-safe-rule",
- "version": "v1.0.1",
+ "name": "symplify/phpstan-extensions",
+ "version": "12.0.2",
"source": {
"type": "git",
- "url": "https://github.com/thecodingmachine/phpstan-safe-rule.git",
- "reference": "1a1ae26c29011d2d48636353ecadf7fc40997401"
+ "url": "https://github.com/symplify/phpstan-extensions.git",
+ "reference": "5ce15cb084eb3bc7f92b77020c59ff3d318746d5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/phpstan-safe-rule/zipball/1a1ae26c29011d2d48636353ecadf7fc40997401",
- "reference": "1a1ae26c29011d2d48636353ecadf7fc40997401",
+ "url": "https://api.github.com/repos/symplify/phpstan-extensions/zipball/5ce15cb084eb3bc7f92b77020c59ff3d318746d5",
+ "reference": "5ce15cb084eb3bc7f92b77020c59ff3d318746d5",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0",
- "phpstan/phpstan": "^0.10 | ^0.11 | ^0.12",
- "thecodingmachine/safe": "^1.0"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^7.5.2",
- "squizlabs/php_codesniffer": "^3.4"
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0"
},
"type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "1.0-dev"
- },
"phpstan": {
"includes": [
- "phpstan-safe-rule.neon"
+ "config/config.neon"
]
}
},
"autoload": {
"psr-4": {
- "TheCodingMachine\\Safe\\PHPStan\\": "src/"
+ "Symplify\\PHPStanExtensions\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "David Négrier",
- "email": "d.negrier@thecodingmachine.com"
- }
+ "description": "Pre-escaped error messages in 'symplify' error format, container aware test case and other useful extensions for PHPStan",
+ "keywords": [
+ "phpstan-extension",
+ "static analysis"
],
- "description": "A PHPStan rule to detect safety issues. Must be used in conjunction with thecodingmachine/safe",
"support": {
- "issues": "https://github.com/thecodingmachine/phpstan-safe-rule/issues",
- "source": "https://github.com/thecodingmachine/phpstan-safe-rule/tree/v1.0.1"
+ "issues": "https://github.com/symplify/phpstan-extensions/issues",
+ "source": "https://github.com/symplify/phpstan-extensions/tree/12.0.2"
},
- "time": "2020-08-30T11:41:12+00:00"
+ "funding": [
+ {
+ "url": "https://www.paypal.me/rectorphp",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "abandoned": "symplify/phpstan-rules",
+ "time": "2025-11-12T16:46:04+00:00"
},
{
- "name": "thecodingmachine/phpstan-strict-rules",
- "version": "v0.12.2",
+ "name": "thecodingmachine/safe",
+ "version": "v3.4.0",
"source": {
"type": "git",
- "url": "https://github.com/thecodingmachine/phpstan-strict-rules.git",
- "reference": "ed65c3cf33e3b668c5a072d49741965114c881b5"
+ "url": "https://github.com/thecodingmachine/safe.git",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thecodingmachine/phpstan-strict-rules/zipball/ed65c3cf33e3b668c5a072d49741965114c881b5",
- "reference": "ed65c3cf33e3b668c5a072d49741965114c881b5",
+ "url": "https://api.github.com/repos/thecodingmachine/safe/zipball/705683a25bacf0d4860c7dea4d7947bfd09eea19",
+ "reference": "705683a25bacf0d4860c7dea4d7947bfd09eea19",
"shasum": ""
},
"require": {
- "php": "^7.1|^8.0",
- "phpstan/phpstan": "^0.12"
+ "php": "^8.1"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^7.1"
- },
- "type": "phpstan-extension",
- "extra": {
- "branch-alias": {
- "dev-master": "0.12-dev"
- },
- "phpstan": {
- "includes": [
- "phpstan-strict-rules.neon"
- ]
- }
+ "php-parallel-lint/php-parallel-lint": "^1.4",
+ "phpstan/phpstan": "^2",
+ "phpunit/phpunit": "^10",
+ "squizlabs/php_codesniffer": "^3.2"
},
+ "type": "library",
"autoload": {
- "psr-4": {
- "TheCodingMachine\\PHPStan\\": "src/"
- }
+ "files": [
+ "lib/special_cases.php",
+ "generated/apache.php",
+ "generated/apcu.php",
+ "generated/array.php",
+ "generated/bzip2.php",
+ "generated/calendar.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/gettext.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/inotify.php",
+ "generated/json.php",
+ "generated/ldap.php",
+ "generated/libxml.php",
+ "generated/lzf.php",
+ "generated/mailparse.php",
+ "generated/mbstring.php",
+ "generated/misc.php",
+ "generated/mysql.php",
+ "generated/mysqli.php",
+ "generated/network.php",
+ "generated/oci8.php",
+ "generated/opcache.php",
+ "generated/openssl.php",
+ "generated/outcontrol.php",
+ "generated/pcntl.php",
+ "generated/pcre.php",
+ "generated/pgsql.php",
+ "generated/posix.php",
+ "generated/ps.php",
+ "generated/pspell.php",
+ "generated/readline.php",
+ "generated/rnp.php",
+ "generated/rpminfo.php",
+ "generated/rrd.php",
+ "generated/sem.php",
+ "generated/session.php",
+ "generated/shmop.php",
+ "generated/sockets.php",
+ "generated/sodium.php",
+ "generated/solr.php",
+ "generated/spl.php",
+ "generated/sqlsrv.php",
+ "generated/ssdeep.php",
+ "generated/ssh2.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"
+ ],
+ "classmap": [
+ "lib/DateTime.php",
+ "lib/DateTimeImmutable.php",
+ "lib/Exceptions/",
+ "generated/Exceptions/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
+ "description": "PHP core functions that throw exceptions instead of returning FALSE on error",
+ "support": {
+ "issues": "https://github.com/thecodingmachine/safe/issues",
+ "source": "https://github.com/thecodingmachine/safe/tree/v3.4.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/OskarStark",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/shish",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/silasjoisten",
+ "type": "github"
+ },
{
- "name": "David Négrier",
- "email": "d.negrier@thecodingmachine.com"
+ "url": "https://github.com/staabm",
+ "type": "github"
}
],
- "description": "A set of additional rules for PHPStan based on best practices followed at TheCodingMachine",
- "support": {
- "issues": "https://github.com/thecodingmachine/phpstan-strict-rules/issues",
- "source": "https://github.com/thecodingmachine/phpstan-strict-rules/tree/v0.12.2"
- },
- "time": "2021-11-08T09:01:22+00:00"
+ "time": "2026-02-04T18:08:13+00:00"
},
{
"name": "theseer/tokenizer",
- "version": "1.2.1",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/theseer/tokenizer.git",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
- "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
+ "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-tokenizer": "*",
"ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
+ "php": "^8.1"
},
"type": "library",
"autoload": {
@@ -9036,7 +9544,7 @@
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
"support": {
"issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/1.2.1"
+ "source": "https://github.com/theseer/tokenizer/tree/2.0.1"
},
"funding": [
{
@@ -9044,143 +9552,107 @@
"type": "github"
}
],
- "time": "2021-07-28T10:34:58+00:00"
+ "time": "2025-12-08T11:19:18+00:00"
},
{
- "name": "vimeo/psalm",
- "version": "4.22.0",
+ "name": "tomasvotruba/type-coverage",
+ "version": "2.2.2",
"source": {
"type": "git",
- "url": "https://github.com/vimeo/psalm.git",
- "reference": "fc2c6ab4d5fa5d644d8617089f012f3bb84b8703"
+ "url": "https://github.com/TomasVotruba/type-coverage.git",
+ "reference": "25f298265c823e8fb0505169135855e1e6a91021"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/fc2c6ab4d5fa5d644d8617089f012f3bb84b8703",
- "reference": "fc2c6ab4d5fa5d644d8617089f012f3bb84b8703",
+ "url": "https://api.github.com/repos/TomasVotruba/type-coverage/zipball/25f298265c823e8fb0505169135855e1e6a91021",
+ "reference": "25f298265c823e8fb0505169135855e1e6a91021",
"shasum": ""
},
"require": {
- "amphp/amp": "^2.4.2",
- "amphp/byte-stream": "^1.5",
- "composer/package-versions-deprecated": "^1.8.0",
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "composer/xdebug-handler": "^1.1 || ^2.0 || ^3.0",
- "dnoegel/php-xdg-base-dir": "^0.1.1",
- "ext-ctype": "*",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "felixfbecker/advanced-json-rpc": "^3.0.3",
- "felixfbecker/language-server-protocol": "^1.5",
- "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
- "nikic/php-parser": "^4.13",
- "openlss/lib-array2xml": "^1.0",
- "php": "^7.1|^8",
- "sebastian/diff": "^3.0 || ^4.0",
- "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0 || ^6.0",
- "webmozart/path-util": "^2.3"
- },
- "provide": {
- "psalm/psalm": "self.version"
+ "php": "^8.4",
+ "phpstan/phpstan": "^2.2"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.2",
- "brianium/paratest": "^4.0||^6.0",
- "ext-curl": "*",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpdocumentor/reflection-docblock": "^5",
- "phpmyadmin/sql-parser": "5.1.0||dev-master",
- "phpspec/prophecy": ">=1.9.0",
- "phpunit/phpunit": "^9.0",
- "psalm/plugin-phpunit": "^0.16",
- "slevomat/coding-standard": "^7.0",
- "squizlabs/php_codesniffer": "^3.5",
- "symfony/process": "^4.3 || ^5.0 || ^6.0",
- "weirdan/prophecy-shim": "^1.0 || ^2.0"
- },
- "suggest": {
- "ext-curl": "In order to send data to shepherd",
- "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
+ "phpstan/extension-installer": "^1.4",
+ "phpunit/phpunit": "^12.5",
+ "rector/jack": "^1.0",
+ "rector/rector": "^2.4",
+ "shipmonk/composer-dependency-analyser": "^1.8",
+ "symplify/easy-coding-standard": "^13.1",
+ "tomasvotruba/unused-public": "^2.2",
+ "tracy/tracy": "^2.12"
},
- "bin": [
- "psalm",
- "psalm-language-server",
- "psalm-plugin",
- "psalm-refactor",
- "psalter"
- ],
- "type": "library",
+ "type": "phpstan-extension",
"extra": {
- "branch-alias": {
- "dev-master": "4.x-dev",
- "dev-3.x": "3.x-dev",
- "dev-2.x": "2.x-dev",
- "dev-1.x": "1.x-dev"
+ "phpstan": {
+ "includes": [
+ "config/extension.neon"
+ ]
}
},
"autoload": {
- "files": [
- "src/functions.php",
- "src/spl_object_id.php"
- ],
"psr-4": {
- "Psalm\\": "src/Psalm/"
+ "TomasVotruba\\TypeCoverage\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Matthew Brown"
- }
- ],
- "description": "A static analysis tool for finding errors in PHP applications",
+ "description": "Measure type coverage of your project",
"keywords": [
- "code",
- "inspection",
- "php"
+ "phpstan-extension",
+ "static analysis"
],
"support": {
- "issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/4.22.0"
+ "issues": "https://github.com/TomasVotruba/type-coverage/issues",
+ "source": "https://github.com/TomasVotruba/type-coverage/tree/2.2.2"
},
- "time": "2022-02-24T20:34:05+00:00"
+ "funding": [
+ {
+ "url": "https://www.paypal.me/rectorphp",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/tomasvotruba",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-07T12:35:00+00:00"
},
{
"name": "webmozart/assert",
- "version": "1.10.0",
+ "version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/assert.git",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25"
+ "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25",
- "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/2ccb7c2e821038c03a3e6e1700c570c158c55f70",
+ "reference": "2ccb7c2e821038c03a3e6e1700c570c158c55f70",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
+ "ext-ctype": "*",
+ "ext-date": "*",
+ "ext-filter": "*",
+ "php": "^8.2"
},
- "require-dev": {
- "phpunit/phpunit": "^8.5.13"
+ "suggest": {
+ "ext-intl": "",
+ "ext-simplexml": "",
+ "ext-spl": ""
},
"type": "library",
"extra": {
+ "psalm": {
+ "pluginClass": "Webmozart\\Assert\\PsalmPlugin"
+ },
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-master": "2.0-dev",
+ "dev-feature/2-0": "2.0-dev"
}
},
"autoload": {
@@ -9196,6 +9668,10 @@
{
"name": "Bernhard Schussek",
"email": "bschussek@gmail.com"
+ },
+ {
+ "name": "Woody Gilk",
+ "email": "woody.gilk@gmail.com"
}
],
"description": "Assertions to validate method input/output with nice error messages.",
@@ -9206,27 +9682,26 @@
],
"support": {
"issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.10.0"
+ "source": "https://github.com/webmozarts/assert/tree/2.4.1"
},
- "time": "2021-03-09T10:59:23+00:00"
+ "time": "2026-06-15T15:31:57+00:00"
},
{
"name": "webmozart/glob",
- "version": "4.4.0",
+ "version": "4.7.0",
"source": {
"type": "git",
"url": "https://github.com/webmozarts/glob.git",
- "reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83"
+ "reference": "8a2842112d6916e61e0e15e316465b611f3abc17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/glob/zipball/539b5dbc10021d3f9242e7a9e9b6b37843179e83",
- "reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83",
+ "url": "https://api.github.com/repos/webmozarts/glob/zipball/8a2842112d6916e61e0e15e316465b611f3abc17",
+ "reference": "8a2842112d6916e61e0e15e316465b611f3abc17",
"shasum": ""
},
"require": {
- "php": "^7.3 || ^8.0.0",
- "webmozart/path-util": "^2.2"
+ "php": "^7.3 || ^8.0.0"
},
"require-dev": {
"phpunit/phpunit": "^9.5",
@@ -9256,41 +9731,52 @@
"description": "A PHP implementation of Ant's glob.",
"support": {
"issues": "https://github.com/webmozarts/glob/issues",
- "source": "https://github.com/webmozarts/glob/tree/4.4.0"
+ "source": "https://github.com/webmozarts/glob/tree/4.7.0"
},
- "time": "2021-10-07T16:13:08+00:00"
+ "time": "2024-03-07T20:33:40+00:00"
},
{
- "name": "webmozart/path-util",
- "version": "2.3.0",
+ "name": "wyrihaximus/async-test-utilities",
+ "version": "13.1.0",
"source": {
"type": "git",
- "url": "https://github.com/webmozart/path-util.git",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
+ "url": "https://github.com/WyriHaximus/php-async-test-utilities.git",
+ "reference": "65cbbd82500dd4da040fdc06f1513364f91e136f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
+ "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/65cbbd82500dd4da040fdc06f1513364f91e136f",
+ "reference": "65cbbd82500dd4da040fdc06f1513364f91e136f",
"shasum": ""
},
"require": {
- "php": ">=5.3.3",
- "webmozart/assert": "~1.0"
+ "php": "^8.4",
+ "phpunit/phpunit": "^13.1.14",
+ "react/async": "^4.3.0",
+ "react/event-loop": "^1.6.0",
+ "react/promise": "^3.3.0",
+ "wyrihaximus/phpstan-react": "^2.0.0",
+ "wyrihaximus/react-phpunit-run-tests-in-fiber": "^4.0.0",
+ "wyrihaximus/test-utilities": "^13.1.0"
+ },
+ "conflict": {
+ "composer/compoer": "<2.6.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1"
+ "react/promise-timer": "^1.11.0",
+ "wyrihaximus/makefiles": "^0.10.6"
},
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
}
},
"autoload": {
"psr-4": {
- "Webmozart\\PathUtil\\": "src/"
+ "WyriHaximus\\AsyncTestUtilities\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -9299,47 +9785,99 @@
],
"authors": [
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
+ "name": "Cees-Jan Kiewiet",
+ "email": "ceesjank@gmail.com"
}
],
- "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
+ "description": "Test utilities for api-clients packages",
"support": {
- "issues": "https://github.com/webmozart/path-util/issues",
- "source": "https://github.com/webmozart/path-util/tree/2.3.0"
+ "issues": "https://github.com/WyriHaximus/php-async-test-utilities/issues",
+ "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/13.1.0"
},
- "abandoned": "symfony/filesystem",
- "time": "2015-12-17T08:42:14+00:00"
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-09T08:34:11+00:00"
},
{
- "name": "wyrihaximus/async-test-utilities",
- "version": "4.2.2",
+ "name": "wyrihaximus/coding-standard",
+ "version": "4.0.0",
"source": {
"type": "git",
- "url": "https://github.com/WyriHaximus/php-async-test-utilities.git",
- "reference": "1813284920f7c26bf6d48a717a37603243585ea0"
+ "url": "https://github.com/WyriHaximus/php-coding-standard.git",
+ "reference": "29855675f089665ad4923afb61305cbf42589255"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-async-test-utilities/zipball/1813284920f7c26bf6d48a717a37603243585ea0",
- "reference": "1813284920f7c26bf6d48a717a37603243585ea0",
+ "url": "https://api.github.com/repos/WyriHaximus/php-coding-standard/zipball/29855675f089665ad4923afb61305cbf42589255",
+ "reference": "29855675f089665ad4923afb61305cbf42589255",
"shasum": ""
},
"require": {
- "clue/block-react": "^1.5",
- "php": "^8 || ^7.4",
- "phpunit/phpunit": "^9.5",
- "react/event-loop": "^1.2",
- "react/promise": "^2.9",
- "wyrihaximus/test-utilities": "^5 || ^4 || ^3.7.6"
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.2.0",
+ "doctrine/coding-standard": "^14.0.0",
+ "php": "^8.4",
+ "slevomat/coding-standard": "^8.26.0",
+ "squizlabs/php_codesniffer": "^4.0.1"
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WyriHaximus Coding Standard",
+ "support": {
+ "issues": "https://github.com/WyriHaximus/php-coding-standard/issues",
+ "source": "https://github.com/WyriHaximus/php-coding-standard/tree/4.0.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ }
+ ],
+ "time": "2026-01-14T17:34:23+00:00"
+ },
+ {
+ "name": "wyrihaximus/makefiles",
+ "version": "0.11.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/WyriHaximus/Makefiles.git",
+ "reference": "3db0bb5263c42f0484b031cbe43add3755baeb4e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/WyriHaximus/Makefiles/zipball/3db0bb5263c42f0484b031cbe43add3755baeb4e",
+ "reference": "3db0bb5263c42f0484b031cbe43add3755baeb4e",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^2",
+ "ext-json": "^8.4",
+ "php": "^8.4"
+ },
+ "conflict": {
+ "infection/infection": "<0.32.0"
},
"require-dev": {
- "wyrihaximus/iterator-or-array-to-array": "^1.2"
+ "wyrihaximus/test-utilities": "^13.1.0"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "WyriHaximus\\Makefiles\\Composer\\Installer",
+ "wyrihaximus": {
+ "supported-features": {
+ "composer-plugin": true
+ }
+ }
},
- "type": "library",
"autoload": {
"psr-4": {
- "WyriHaximus\\AsyncTestUtilities\\": "src/"
+ "WyriHaximus\\Makefiles\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -9352,10 +9890,10 @@
"email": "ceesjank@gmail.com"
}
],
- "description": "Test utilities for api-clients packages",
+ "description": "🧱 Makefile building blocks",
"support": {
- "issues": "https://github.com/WyriHaximus/php-async-test-utilities/issues",
- "source": "https://github.com/WyriHaximus/php-async-test-utilities/tree/4.2.2"
+ "issues": "https://github.com/WyriHaximus/Makefiles/issues",
+ "source": "https://github.com/WyriHaximus/Makefiles/tree/0.11.1"
},
"funding": [
{
@@ -9363,38 +9901,53 @@
"type": "github"
}
],
- "time": "2022-02-27T11:58:08+00:00"
+ "time": "2026-06-13T01:23:07+00:00"
},
{
- "name": "wyrihaximus/coding-standard",
- "version": "2.7.0",
+ "name": "wyrihaximus/phpstan-react",
+ "version": "2.0.0",
"source": {
"type": "git",
- "url": "https://github.com/WyriHaximus/php-coding-standard.git",
- "reference": "e07077c6ebb7796e793d2275a91e43c4be205b28"
+ "url": "https://github.com/WyriHaximus/phpstan-reactphp.git",
+ "reference": "1b7464948b62b569e049d576da967bd980d7d2a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-coding-standard/zipball/e07077c6ebb7796e793d2275a91e43c4be205b28",
- "reference": "e07077c6ebb7796e793d2275a91e43c4be205b28",
+ "url": "https://api.github.com/repos/WyriHaximus/phpstan-reactphp/zipball/1b7464948b62b569e049d576da967bd980d7d2a9",
+ "reference": "1b7464948b62b569e049d576da967bd980d7d2a9",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1",
- "doctrine/coding-standard": "^9.0.0",
- "php": "^8 || ^7.4",
- "slevomat/coding-standard": "^7.0.14",
- "squizlabs/php_codesniffer": "^3.6.0"
+ "php": "^8.3"
+ },
+ "require-dev": {
+ "jawira/case-converter": "^3.5",
+ "nikic/php-parser": "^5.4.0",
+ "phpstan/phpdoc-parser": "^2.1.0",
+ "wyrihaximus/makefiles": "^0.3.0",
+ "wyrihaximus/test-utilities": "^7.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "WyriHaximus\\React\\PHPStan\\": "src/"
+ }
},
- "type": "phpcodesniffer-standard",
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "WyriHaximus Coding Standard",
+ "description": "👎 ReactPHP extension for PHPStan",
"support": {
- "issues": "https://github.com/WyriHaximus/php-coding-standard/issues",
- "source": "https://github.com/WyriHaximus/php-coding-standard/tree/2.7.0"
+ "issues": "https://github.com/WyriHaximus/phpstan-reactphp/issues",
+ "source": "https://github.com/WyriHaximus/phpstan-reactphp/tree/2.0.0"
},
"funding": [
{
@@ -9402,34 +9955,46 @@
"type": "github"
}
],
- "time": "2021-12-14T21:11:39+00:00"
+ "time": "2025-04-26T22:37:11+00:00"
},
{
"name": "wyrihaximus/phpstan-rules-wrapper",
- "version": "1.2.5",
+ "version": "13.1.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper.git",
- "reference": "b15e2b272408ec3a0467361557b0b88089bd1d4d"
+ "reference": "38449f0fc35fce570d26f1841606bbef51710365"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/b15e2b272408ec3a0467361557b0b88089bd1d4d",
- "reference": "b15e2b272408ec3a0467361557b0b88089bd1d4d",
+ "url": "https://api.github.com/repos/WyriHaximus/php-phpstan-rules-wrapper/zipball/38449f0fc35fce570d26f1841606bbef51710365",
+ "reference": "38449f0fc35fce570d26f1841606bbef51710365",
"shasum": ""
},
"require": {
- "ergebnis/phpstan-rules": "^0.15.3",
- "jangregor/phpstan-prophecy": "^0.8.1",
- "pepakriz/phpstan-exception-rules": "^0.11.7",
- "phpstan/phpstan-deprecation-rules": "^0.12.6",
- "phpstan/phpstan-php-parser": "^0.12.3",
- "phpstan/phpstan-phpunit": "^0.12.22",
- "phpstan/phpstan-strict-rules": "^0.12.11",
- "thecodingmachine/phpstan-safe-rule": "^1.0",
- "thecodingmachine/phpstan-strict-rules": "^0.12.1"
+ "ergebnis/phpstan-rules": "^2.13.1",
+ "php": "^8.4",
+ "phpstan/extension-installer": "^1.4.3",
+ "phpstan/phpstan": "^2.2.2",
+ "phpstan/phpstan-deprecation-rules": "^2.0.4",
+ "phpstan/phpstan-mockery": "^2.0.0",
+ "phpstan/phpstan-phpunit": "^2.0.16",
+ "phpstan/phpstan-strict-rules": "^2.0.11",
+ "shipmonk/dead-code-detector": "^1.2.0",
+ "shipmonk/phpstan-rules": "^4.4.0",
+ "staabm/phpstan-psr3": "^1.0.3",
+ "symplify/phpstan-extensions": "^12.0.2",
+ "tomasvotruba/type-coverage": "^2.2.2",
+ "yamadashy/phpstan-friendly-formatter": "^1.4.0"
},
"type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
@@ -9443,7 +10008,64 @@
"description": "🌯 PHPStan rules wrapper",
"support": {
"issues": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/issues",
- "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/1.2.5"
+ "source": "https://github.com/WyriHaximus/php-phpstan-rules-wrapper/tree/13.1.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/WyriHaximus",
+ "type": "github"
+ }
+ ],
+ "time": "2026-06-08T13:27:51+00:00"
+ },
+ {
+ "name": "wyrihaximus/react-phpunit-run-tests-in-fiber",
+ "version": "4.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber.git",
+ "reference": "9ff2c42452909ff0a19f74882c07a1833bd58941"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/zipball/9ff2c42452909ff0a19f74882c07a1833bd58941",
+ "reference": "9ff2c42452909ff0a19f74882c07a1833bd58941",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.4",
+ "react/async": "^4.3.0",
+ "react/event-loop": "^1.5.0",
+ "react/promise": "^3.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<13"
+ },
+ "require-dev": {
+ "react/promise-timer": "^1.11.0",
+ "wyrihaximus/makefiles": "^0.10.6",
+ "wyrihaximus/test-utilities": "^13.0.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "WyriHaximus\\React\\PHPUnit\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "ceesjank@gmail.com"
+ }
+ ],
+ "description": "Trait to run all tests in a fiber",
+ "support": {
+ "issues": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/issues",
+ "source": "https://github.com/WyriHaximus/reactphp-phpunit-run-tests-in-fiber/tree/4.0.0"
},
"funding": [
{
@@ -9451,75 +10073,63 @@
"type": "github"
}
],
- "time": "2021-09-30T14:46:42+00:00"
+ "time": "2026-06-08T21:25:02+00:00"
},
{
"name": "wyrihaximus/test-utilities",
- "version": "3.7.6",
+ "version": "13.1.0",
"source": {
"type": "git",
"url": "https://github.com/WyriHaximus/php-test-utilities.git",
- "reference": "4a900a8f44207c3f0f6a4819676aca7612f4821f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/4a900a8f44207c3f0f6a4819676aca7612f4821f",
- "reference": "4a900a8f44207c3f0f6a4819676aca7612f4821f",
- "shasum": ""
- },
- "require": {
- "dereuromark/composer-prefer-lowest": "^0.1.10",
- "ergebnis/composer-normalize": "^2.15.0",
- "icanhazstring/composer-unused": "^0.7.5",
- "infection/infection": "^0.20.2",
- "jakobbuis/simple-slow-test-reporter": "^1.0",
- "maglnet/composer-require-checker": "^3.5.1",
- "nunomaduro/collision": "^5.10.0",
- "orklah/psalm-insane-comparison": "^1.0.3",
- "php": "^8 || ^7.4",
- "php-coveralls/php-coveralls": "^2.5.1",
- "php-parallel-lint/php-console-highlighter": "^0.5",
- "php-parallel-lint/php-parallel-lint": "^1.3.1",
- "phpspec/prophecy": "^1.14",
- "phpspec/prophecy-phpunit": "^2.0.1",
- "phpstan/phpstan": "^0.12.99",
- "phpunit/phpunit": "^9.5.10",
- "psalm/plugin-phpunit": "^0.16.1",
- "roave/backward-compatibility-check": "^5.0.0",
- "roave/infection-static-analysis-plugin": "^1.7.1",
- "squizlabs/php_codesniffer": "^3.6.1",
- "thecodingmachine/safe": "^1.3.3",
- "vimeo/psalm": "^4.12.0",
- "wyrihaximus/coding-standard": "^2.5.0",
- "wyrihaximus/phpstan-rules-wrapper": "^1.2.5"
+ "reference": "e4980b68709db0c7a03d8fbd4905eec62dd9b102"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/WyriHaximus/php-test-utilities/zipball/e4980b68709db0c7a03d8fbd4905eec62dd9b102",
+ "reference": "e4980b68709db0c7a03d8fbd4905eec62dd9b102",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^2",
+ "ergebnis/composer-normalize": "^2.52.0",
+ "ergebnis/phpunit-slow-test-detector": "^2.24.0",
+ "ext-hash": "^8.4",
+ "ext-json": "^8.4",
+ "icanhazstring/composer-unused": "^0.9.6",
+ "infection/infection": "^0.33.2",
+ "maglnet/composer-require-checker": "^4.20.0",
+ "mockery/mockery": "^1.6.12",
+ "php": "^8.4",
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpstan/phpstan": "^2.2.2",
+ "phpunit/phpunit": "^13.1.13",
+ "rector/rector": "^2.4.5",
+ "roave/backward-compatibility-check": "^8.19.0",
+ "squizlabs/php_codesniffer": "^4.0.1",
+ "wyrihaximus/coding-standard": "^4.0.0",
+ "wyrihaximus/phpstan-rules-wrapper": "^13.1.0"
},
"conflict": {
- "beberlei/assert": ">= 3.3"
+ "composer-unused/symbol-parser": "<0.3.3",
+ "composer/pcre": "<3.3.2",
+ "wyrihaximus/makefiles": "<0.5.0"
},
- "type": "library",
+ "require-dev": {
+ "wyrihaximus/makefiles": "^0.10.6"
+ },
+ "suggest": {
+ "wyrihaximus/async-test-utilities": "The recommended addition to this package when building ReactPHP packages and projects.",
+ "wyrihaximus/makefiles": "Provides autogenerated Makefile utilizing all utilities provided through this package."
+ },
+ "type": "composer-plugin",
"extra": {
- "unused": [
- "php",
- "dereuromark/composer-prefer-lowest",
- "friendsofphp/php-cs-fixer",
- "icanhazstring/composer-unused",
- "infection/infection",
- "jakobbuis/simple-slow-test-reporter",
- "php-coveralls/php-coveralls",
- "php-parallel-lint/php-console-highlighter",
- "php-parallel-lint/php-parallel-lint",
- "maglnet/composer-require-checker",
- "nunomaduro/collision",
- "orklah/psalm-insane-comparison",
- "phpstan/phpstan",
- "phpunit/phpunit",
- "psalm/plugin-phpunit",
- "roave/backward-compatibility-check",
- "roave/infection-static-analysis-plugin",
- "slevomat/coding-standard",
- "vimeo/psalm",
- "wyrihaximus/phpstan-rules-wrapper"
- ]
+ "class": "WyriHaximus\\TestUtilities\\Composer\\Installer",
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
},
"autoload": {
"psr-4": {
@@ -9539,7 +10149,7 @@
"description": "🛠️ Test utilities for api-clients packages",
"support": {
"issues": "https://github.com/WyriHaximus/php-test-utilities/issues",
- "source": "https://github.com/WyriHaximus/php-test-utilities/tree/3.7.6"
+ "source": "https://github.com/WyriHaximus/php-test-utilities/tree/13.1.0"
},
"funding": [
{
@@ -9547,21 +10157,82 @@
"type": "github"
}
],
- "time": "2021-11-15T22:30:45+00:00"
+ "time": "2026-06-08T22:56:10+00:00"
+ },
+ {
+ "name": "yamadashy/phpstan-friendly-formatter",
+ "version": "v1.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/yamadashy/phpstan-friendly-formatter.git",
+ "reference": "cd4882c7293591c13230b5be35e742b33d2ab2ff"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/yamadashy/phpstan-friendly-formatter/zipball/cd4882c7293591c13230b5be35e742b33d2ab2ff",
+ "reference": "cd4882c7293591c13230b5be35e742b33d2ab2ff",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^8.1",
+ "php-parallel-lint/php-console-highlighter": "^0.3 || ^0.4 || ^0.5 || ^1.0",
+ "phpstan/phpstan": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.93.0",
+ "phpstan/phpstan-phpunit": "^2.0.12",
+ "phpunit/phpunit": "^10.0 || ^11.0"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Yamadashy\\PhpStanFriendlyFormatter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Kazuki Yamada",
+ "email": "koukun0120@gmail.com"
+ }
+ ],
+ "description": "Simple error formatter for PHPStan that display code frame",
+ "keywords": [
+ "PHPStan",
+ "package",
+ "php",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/yamadashy/phpstan-friendly-formatter/issues",
+ "source": "https://github.com/yamadashy/phpstan-friendly-formatter/tree/v1.4.0"
+ },
+ "time": "2026-01-26T15:12:47+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
- "stability-flags": [],
+ "stability-flags": {},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": "^8 || ^7.4",
- "ext-session": "^8 || ^7.4"
+ "php": "^8.4",
+ "ext-random": "^8.4",
+ "ext-session": "^8.4"
},
- "platform-dev": [],
+ "platform-dev": {},
"platform-overrides": {
- "php": "7.4.7"
+ "php": "8.4.13"
},
- "plugin-api-version": "2.3.0"
+ "plugin-api-version": "2.9.0"
}
diff --git a/etc/ci/markdown-link-checker.json b/etc/ci/markdown-link-checker.json
new file mode 100644
index 0000000..9269e03
--- /dev/null
+++ b/etc/ci/markdown-link-checker.json
@@ -0,0 +1,12 @@
+{
+ "httpHeaders": [
+ {
+ "urls": [
+ "https://docs.github.com/"
+ ],
+ "headers": {
+ "Accept-Encoding": "zstd, br, gzip, deflate"
+ }
+ }
+ ]
+}
diff --git a/composer-require-checker.json b/etc/qa/composer-require-checker.json
similarity index 100%
rename from composer-require-checker.json
rename to etc/qa/composer-require-checker.json
diff --git a/etc/qa/composer-unused.php b/etc/qa/composer-unused.php
new file mode 100644
index 0000000..09590b2
--- /dev/null
+++ b/etc/qa/composer-unused.php
@@ -0,0 +1,7 @@
+ $config;
diff --git a/etc/qa/infection.json5 b/etc/qa/infection.json5
new file mode 100644
index 0000000..76f3e0f
--- /dev/null
+++ b/etc/qa/infection.json5
@@ -0,0 +1,15 @@
+{
+ "timeout": 120,
+ "source": {
+ "directories": [
+ "../../src"
+ ]
+ },
+ "logs": {
+ "text": "../../var/infection.log",
+ "summary": "../../var/infection-summary.log",
+ "json": "../../var/infection.json",
+ "perMutator": "../../var/infection-per-mutator.md",
+ "github": true
+ }
+}
diff --git a/phpcs.xml.dist b/etc/qa/phpcs.xml
similarity index 52%
rename from phpcs.xml.dist
rename to etc/qa/phpcs.xml
index 68bfba6..25d5677 100644
--- a/phpcs.xml.dist
+++ b/etc/qa/phpcs.xml
@@ -1,13 +1,14 @@
-
+
-
+
- src
- tests
+ ../../etc
+ ../../src
+ ../../tests
diff --git a/phpstan.neon b/etc/qa/phpstan.neon
similarity index 53%
rename from phpstan.neon
rename to etc/qa/phpstan.neon
index f996119..ad10003 100644
--- a/phpstan.neon
+++ b/etc/qa/phpstan.neon
@@ -1,12 +1,10 @@
parameters:
+ level: max
+ paths:
+ - ../../etc
+ - ../../src
+ - ../../tests
ignoreErrors:
- '#Constructor in [a-zA-Z0-9\\_]+ has parameter \$[a-zA-Z0-9_]+ with default value.#'
- '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9_]+\(\) has parameter \$[a-zA-Z0-9_]+ with a nullable type declaration.#'
- '#Method [a-zA-Z0-9\\_]+::[a-zA-Z0-9_]+\(\) has parameter \$[a-zA-Z0-9_]+ with null as default value.#'
- - '#In method \"WyriHaximus\\React\\Http\\Middleware\\SessionMiddleware::fetchSessionFromRequest\", caught \"Throwable\" must be rethrown.#'
- ergebnis:
- classesAllowedToBeExtended:
- - ApiClients\Tools\TestUtilities\TestCase
-
-includes:
- - vendor/wyrihaximus/async-test-utilities/rules.neon
diff --git a/etc/qa/phpunit.xml b/etc/qa/phpunit.xml
new file mode 100644
index 0000000..dfe1d76
--- /dev/null
+++ b/etc/qa/phpunit.xml
@@ -0,0 +1,27 @@
+
+
+
+
+ ../../tests/
+
+
+
+
+ ../../src/
+
+
+
+
+
+
diff --git a/etc/qa/rector.php b/etc/qa/rector.php
new file mode 100644
index 0000000..ce6b5c9
--- /dev/null
+++ b/etc/qa/rector.php
@@ -0,0 +1,7 @@
+
-
-
-
- tests/
-
-
-
-
- src/
-
-
-
diff --git a/psalm.xml b/psalm.xml
deleted file mode 100644
index 4e1ab74..0000000
--- a/psalm.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/Session.php b/src/Session.php
index ad92ea0..1791928 100644
--- a/src/Session.php
+++ b/src/Session.php
@@ -7,38 +7,24 @@
use InvalidArgumentException;
use function array_key_exists;
+use function is_int;
+use function is_string;
use const PHP_SESSION_ACTIVE;
use const PHP_SESSION_NONE;
+/** @api */
final class Session
{
- private string $id;
-
- /** @var array */
- private array $contents;
-
- private SessionIdInterface $sessionId;
-
/** @var string[] */
private array $oldIds = [];
- private int $status = PHP_SESSION_NONE;
+ private int $status;
- /**
- * @param array $contents
- */
- public function __construct(string $id, array $contents, SessionIdInterface $sessionId)
+ /** @param array $contents */
+ public function __construct(private string $id, private array $contents, private SessionIdInterface $sessionId)
{
- $this->id = $id;
- $this->contents = $contents;
- $this->sessionId = $sessionId;
-
- if ($this->id === '') {
- return;
- }
-
- $this->status = PHP_SESSION_ACTIVE;
+ $this->status = $this->id === '' ? PHP_SESSION_NONE : PHP_SESSION_ACTIVE;
}
public function getId(): string
@@ -46,25 +32,19 @@ public function getId(): string
return $this->id;
}
- /**
- * @param array $contents
- */
+ /** @param array $contents */
public function setContents(array $contents): void
{
$this->contents = $contents;
}
- /**
- * @return array
- */
+ /** @return array */
public function getContents(): array
{
return $this->contents;
}
- /**
- * @return string[]
- */
+ /** @return string[] */
public function getOldIds(): array
{
return $this->oldIds;
@@ -115,9 +95,7 @@ public function regenerate(): bool
return true;
}
- /**
- * @return array
- */
+ /** @return array */
public function toArray(): array
{
return [
@@ -142,14 +120,25 @@ public function fromArray(array $session, bool $clone = true): self
}
$self = $this;
- if ($clone === true) {
+ if ($clone) {
$self = clone $this;
}
- $self->id = $session['id'];
- $self->contents = $session['contents'];
- $self->oldIds = $session['oldIds'];
- $self->status = $session['status'];
+ $id = $session['id'];
+ $status = $session['status'];
+ if (! is_string($id) || ! is_int($status)) {
+ throw new InvalidArgumentException('Session array "id" must be a string and "status" must be an integer.');
+ }
+
+ /** @var array $contents */
+ $contents = $session['contents'];
+ /** @var array $oldIds */
+ $oldIds = $session['oldIds'];
+
+ $self->id = $id;
+ $self->contents = $contents;
+ $self->oldIds = $oldIds;
+ $self->status = $status;
return $self;
}
diff --git a/src/SessionId/RandomBytes.php b/src/SessionId/RandomBytes.php
index c074d47..ba2f674 100644
--- a/src/SessionId/RandomBytes.php
+++ b/src/SessionId/RandomBytes.php
@@ -9,15 +9,13 @@
use function bin2hex;
use function random_bytes;
-final class RandomBytes implements SessionIdInterface
+final readonly class RandomBytes implements SessionIdInterface
{
- public const DEFAULT_LENGTH = 32;
+ public const int DEFAULT_LENGTH = 32;
- private int $length;
-
- public function __construct(int $length = self::DEFAULT_LENGTH)
+ /** @param int<1, max> $length */
+ public function __construct(private int $length = self::DEFAULT_LENGTH)
{
- $this->length = $length;
}
public function generate(): string
diff --git a/src/SessionMiddleware.php b/src/SessionMiddleware.php
index 9671f95..9ba185c 100644
--- a/src/SessionMiddleware.php
+++ b/src/SessionMiddleware.php
@@ -13,15 +13,20 @@
use WyriHaximus\React\Http\Middleware\SessionId\RandomBytes;
use function array_key_exists;
+use function array_replace;
+use function assert;
+use function is_array;
+use function is_bool;
+use function is_int;
+use function is_string;
use function React\Promise\resolve;
-use function Safe\array_replace;
use function time;
-final class SessionMiddleware
+final readonly class SessionMiddleware
{
- public const ATTRIBUTE_NAME = 'wyrihaximus.react.http.middleware.session';
+ public const string ATTRIBUTE_NAME = 'wyrihaximus.react.http.middleware.session';
- public const DEFAULT_COOKIE_PARAMS = [
+ public const array DEFAULT_COOKIE_PARAMS = [
0,
'',
'',
@@ -29,44 +34,45 @@ final class SessionMiddleware
false,
];
- private string $cookieName;
-
- private CacheInterface $cache;
-
/** @var array */
- private array $cookieParams = [];
+ private array $cookieParams;
private SessionIdInterface $sessionId;
/**
* @param array $cookieParams
+ *
+ * @api
*/
public function __construct(
- string $cookieName,
- CacheInterface $cache,
+ private string $cookieName,
+ private CacheInterface $cache,
array $cookieParams = [],
- ?SessionIdInterface $sessionId = null
+ SessionIdInterface|null $sessionId = null,
) {
- $this->cookieName = $cookieName;
- $this->cache = $cache;
$this->cookieParams = array_replace(self::DEFAULT_COOKIE_PARAMS, $cookieParams);
- if ($sessionId === null) {
+ if (! $sessionId instanceof SessionIdInterface) {
$sessionId = new RandomBytes();
}
$this->sessionId = $sessionId;
}
+ /** @return PromiseInterface */
public function __invoke(ServerRequestInterface $request, callable $next): PromiseInterface
{
return $this->fetchSessionFromRequest($request)->then(function (Session $session) use ($next, $request): PromiseInterface {
$request = $request->withAttribute(self::ATTRIBUTE_NAME, $session);
return resolve(
- $next($request)
+ $next($request),
)->then(
- fn (ResponseInterface $response): PromiseInterface => $this->updateCache($session)->then(static fn (): ResponseInterface => $response)
+ function (mixed $response) use ($session): PromiseInterface {
+ assert($response instanceof ResponseInterface);
+
+ return $this->updateCache($session)->then(static fn (): ResponseInterface => $response);
+ },
)->then(function (ResponseInterface $response) use ($session): ResponseInterface {
$cookie = $this->getCookie($session);
$response = $cookie->addToResponse($response);
@@ -76,6 +82,7 @@ public function __invoke(ServerRequestInterface $request, callable $next): Promi
});
}
+ /** @return PromiseInterface */
private function fetchSessionFromRequest(ServerRequestInterface $request): PromiseInterface
{
$id = '';
@@ -86,12 +93,13 @@ private function fetchSessionFromRequest(ServerRequestInterface $request): Promi
return resolve(new Session($id, [], $this->sessionId));
}
- $id = $cookies[$this->cookieName];
+ $cookieValue = $cookies[$this->cookieName];
+ $id = is_string($cookieValue) ? $cookieValue : '';
return $this->fetchSessionDataFromCache($id)->then(
- fn (array $sessionData): Session => new Session($id, $sessionData, $this->sessionId)
+ fn (array $sessionData): Session => new Session($id, $sessionData, $this->sessionId),
);
- } catch (Throwable $et) {
+ } catch (Throwable) {
// Do nothing, only a not found will be thrown so generating our own id now
// @ignoreException
}
@@ -99,28 +107,25 @@ private function fetchSessionFromRequest(ServerRequestInterface $request): Promi
return resolve(new Session($id, [], $this->sessionId));
}
+ /** @return PromiseInterface> */
private function fetchSessionDataFromCache(string $id): PromiseInterface
{
if ($id === '') {
return resolve([]);
}
- /**
- * @phpstan-ignore-next-line
- * @psalm-suppress TooManyTemplateParams
- */
- return $this->cache->get($id)->then(static function (?array $result): array {
- if ($result === null) {
+ /** @phpstan-ignore return.type */
+ return $this->cache->get($id)->then(static function (mixed $result): array {
+ if (! is_array($result)) {
return [];
}
+ /** @return array */
return $result;
});
}
- /**
- * @psalm-suppress TooManyTemplateParams
- */
+ /** @return PromiseInterface */
private function updateCache(Session $session): PromiseInterface
{
foreach ($session->getOldIds() as $oldId) {
@@ -131,24 +136,34 @@ private function updateCache(Session $session): PromiseInterface
return resolve($this->cache->set($session->getId(), $session->getContents()));
}
- return resolve();
+ return resolve(null);
}
private function getCookie(Session $session): SetCookie
{
$cookieParams = $this->cookieParams;
+ $expires = $cookieParams[0] ?? 0;
+ $path = $cookieParams[1] ?? '';
+ $domain = $cookieParams[2] ?? '';
+ $secure = $cookieParams[3] ?? false;
+ $httpOnly = $cookieParams[4] ?? false;
+
+ assert(is_int($expires));
+ assert(is_string($path));
+ assert(is_string($domain));
+ assert(is_bool($secure));
+ assert(is_bool($httpOnly));
+
if ($session->isActive()) {
// Only set time when expires is set in the future
- if ($cookieParams[0] > 0) {
- $cookieParams[0] += time();
+ if ($expires > 0) {
+ $expires += time();
}
- return new SetCookie($this->cookieName, $session->getId(), ...$cookieParams);
+ return new SetCookie($this->cookieName, $session->getId(), $expires, $path, $domain, $secure, $httpOnly);
}
- unset($cookieParams[0]);
-
- return SetCookie::thatDeletesCookie($this->cookieName, ...$cookieParams);
+ return SetCookie::thatDeletesCookie($this->cookieName, $path, $domain, $secure, $httpOnly);
}
}
diff --git a/tests/InspectableArrayCache.php b/tests/InspectableArrayCache.php
index fc0239b..ea35cb7 100644
--- a/tests/InspectableArrayCache.php
+++ b/tests/InspectableArrayCache.php
@@ -12,22 +12,17 @@
final class InspectableArrayCache implements CacheInterface
{
- /** @var array */
+ /** @var array */
private array $data = [];
- /**
- * @return array
- */
+ /** @return array */
public function getData(): array
{
return $this->data;
}
- /**
- * @param mixed|null $default
- */
+ /** @param mixed $default */
// phpcs:disable
- // @phpstan-ignore-next-line
public function get($key, $default = null): PromiseInterface
{
if (! array_key_exists($key, $this->data)) {
@@ -43,7 +38,6 @@ public function get($key, $default = null): PromiseInterface
* @param ?float $ttl
*/
// phpcs:disable
- // @phpstan-ignore-next-line
public function set($key, $value, $ttl = null): PromiseInterface
{
$this->data[$key] = $value;
@@ -62,13 +56,12 @@ public function delete($key): PromiseInterface
// phpcs:enable
/**
- * @param array $keys
- * @param mixed|null $default
+ * @param array $keys
+ * @param mixed $default
*
* @return PromiseInterface>
*/
// phpcs:disable
- // @phpstan-ignore-next-line
public function getMultiple(array $keys, $default = null): PromiseInterface
{
$items = [];
@@ -86,11 +79,8 @@ public function getMultiple(array $keys, $default = null): PromiseInterface
}
// phpcs:enable
- /**
- * @param array $values
- */
+ /** @param array $values */
// phpcs:disable
- // @phpstan-ignore-next-line
public function setMultiple(array $values, $ttl = null): PromiseInterface
{
foreach ($values as $key => $value) {
@@ -101,9 +91,7 @@ public function setMultiple(array $values, $ttl = null): PromiseInterface
}
// phpcs:enable
- /**
- * @param array $keys
- */
+ /** @param array $keys */
public function deleteMultiple(array $keys): PromiseInterface
{
foreach ($keys as $key) {
diff --git a/tests/SessionId/RandomBytesTest.php b/tests/SessionId/RandomBytesTest.php
index 6e68d87..1447597 100644
--- a/tests/SessionId/RandomBytesTest.php
+++ b/tests/SessionId/RandomBytesTest.php
@@ -4,6 +4,8 @@
namespace WyriHaximus\React\Tests\Http\Middleware\SessionId;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
use WyriHaximus\AsyncTestUtilities\AsyncTestCase;
use WyriHaximus\React\Http\Middleware\SessionId\RandomBytes;
@@ -11,15 +13,10 @@
use function Safe\hex2bin;
use function strlen;
-/**
- * @internal
- */
final class RandomBytesTest extends AsyncTestCase
{
- /**
- * @return iterable>
- */
- public function provideSizes(): iterable
+ /** @return iterable}> */
+ public static function provideSizes(): iterable
{
yield [RandomBytes::DEFAULT_LENGTH];
@@ -28,10 +25,10 @@ public function provideSizes(): iterable
}
}
- /**
- * @dataProvider provideSizes
- */
- public function testGenerate(int $size): void
+ /** @param int<1, max> $size */
+ #[DataProvider('provideSizes')]
+ #[Test]
+ public function generate(int $size): void
{
$randomBytes = new RandomBytes($size);
for ($i = 0; $i < 15; $i++) {
diff --git a/tests/SessionMiddlewareTest.php b/tests/SessionMiddlewareTest.php
index a41d1c7..ebd2944 100644
--- a/tests/SessionMiddlewareTest.php
+++ b/tests/SessionMiddlewareTest.php
@@ -5,7 +5,9 @@
namespace WyriHaximus\React\Tests\Http\Middleware;
use Exception;
-use Prophecy\Argument;
+use Mockery;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use React\Cache\ArrayCache;
@@ -14,15 +16,17 @@
use React\Http\Message\ServerRequest;
use Throwable;
use WyriHaximus\AsyncTestUtilities\AsyncTestCase;
+use WyriHaximus\React\Http\Middleware\Session;
use WyriHaximus\React\Http\Middleware\SessionMiddleware;
use function array_shift;
use function assert;
use function explode;
+use function gmdate;
+use function React\Async\await;
use function React\Promise\reject;
use function React\Promise\resolve;
-use function Safe\gmdate;
-use function Safe\sprintf;
+use function sprintf;
final class SessionMiddlewareTest extends AsyncTestCase
{
@@ -35,167 +39,147 @@ protected function setUp(): void
$this->cache = new InspectableArrayCache();
}
- /**
- * @return iterable>
- */
+ /** @return iterable> */
// phpcs:disable
- public function provideCookieLines(): iterable
+ public static function provideCookieLines(): iterable
{
yield [
- static function (): array {
- return [
- [
- 10,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- true,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- 'secure',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ true,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ 'secure',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- false,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ false,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- true,
- true,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- 'secure',
- 'httponly',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ true,
+ true,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ 'secure',
+ 'httponly',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- false,
- false,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ false,
+ false,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ ],
+ ],
];
yield [
- static function (): array {
- return [
- [
- 10,
- '/example/',
- 'www.example.com',
- false,
- true,
- ],
- [
- 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
- 'path=/example/',
- 'domain=www.example.com',
- 'httponly',
- ],
- ];
- },
+ static fn(): array => [
+ [
+ 10,
+ '/example/',
+ 'www.example.com',
+ false,
+ true,
+ ],
+ [
+ 'expires=' . gmdate('D, d M Y H:i:s T', time() + 10),
+ 'path=/example/',
+ 'domain=www.example.com',
+ 'httponly',
+ ],
+ ],
];
}
/**
- * @return iterable>
+ * @return iterable>
*/
- public function provideHeaderExpiresCombos(): iterable
+ public static function provideHeaderExpiresCombos(): iterable
{
yield [
- static function (): array {
- return [
- 0,
- '',
- ];
- },
+ static fn(): array => [
+ 0,
+ '',
+ ],
];
yield [
@@ -242,25 +226,26 @@ static function (): array {
}
// phpcs:enable
- /**
- * @dataProvider provideCookieLines
- */
- public function testSetCookieLine(callable $setup): void
+ /** @param (callable(): array{array, array}) $setup */
+ #[DataProvider('provideCookieLines')]
+ #[Test]
+ public function setCookieLine(callable $setup): void
{
self::waitUntilTheNextSecond();
[$cookieParams, $cookieLineChunks] = $setup();
$next = static function (ServerRequestInterface $request): ResponseInterface {
- $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->begin();
+ $session = $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME);
+ assert($session instanceof Session);
+ $session->begin();
return new Response();
};
$middleware = new SessionMiddleware('Elmo', $this->cache, $cookieParams);
- $response = $this->await($middleware(new ServerRequest('GET', 'https://www.example.com'), $next));
- assert($response instanceof ResponseInterface);
+ $response = await($middleware(new ServerRequest('GET', 'https://www.example.com'), $next));
$cookieChunks = explode('; ', $response->getHeaderLine('Set-Cookie'));
array_shift($cookieChunks);
@@ -268,10 +253,10 @@ public function testSetCookieLine(callable $setup): void
self::assertSame($cookieLineChunks, $cookieChunks);
}
- /**
- * @dataProvider provideHeaderExpiresCombos
- */
- public function testCookiesExpiresBasedOnConfiguration(callable $cookieMonster): void
+ /** @param callable(): array{0: int, 1: string} $cookieMonster */
+ #[DataProvider('provideHeaderExpiresCombos')]
+ #[Test]
+ public function cookiesExpiresBasedOnConfiguration(callable $cookieMonster): void
{
self::waitUntilTheNextSecond();
@@ -281,17 +266,14 @@ public function testCookiesExpiresBasedOnConfiguration(callable $cookieMonster):
$cookieValue = 'cookies';
$middleware = new SessionMiddleware($cookieName, $this->cache, [$expires]);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ))->withCookieParams([$cookieName => $cookieValue]);
+ 'https://www.example.com/',
+ )->withCookieParams([$cookieName => $cookieValue]);
- $next = static function (): ResponseInterface {
- return new Response();
- };
+ $next = (static fn (): ResponseInterface => new Response());
- $response = $this->await($middleware($request, $next));
- assert($response instanceof ResponseInterface);
+ $response = await($middleware($request, $next));
self::assertSame(
[
@@ -299,19 +281,20 @@ public function testCookiesExpiresBasedOnConfiguration(callable $cookieMonster):
$cookieName . '=' . $cookieValue . $cookieHeaderSuffix,
],
],
- $response->getHeaders()
+ $response->getHeaders(),
);
}
- public function testSessionDoesntExistsAndNotStartingOne(): void
+ #[Test]
+ public function sessionDoesntExistsAndNotStartingOne(): void
{
$cookieName = 'CookieMonster';
$middleware = new SessionMiddleware($cookieName, $this->cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ));
+ 'https://www.example.com/',
+ );
$next = static function (ServerRequestInterface $request) use (&$session): ResponseInterface {
$session = $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME);
@@ -320,21 +303,24 @@ public function testSessionDoesntExistsAndNotStartingOne(): void
$middleware($request, $next);
+ self::assertInstanceOf(Session::class, $session);
self::assertCount(0, $this->cache->getData());
self::assertFalse($session->isActive());
}
- public function testSessionDoesntExistsAndStartingOne(): void
+ #[Test]
+ public function sessionDoesntExistsAndStartingOne(): void
{
$cookieName = 'CookieMonster';
$middleware = new SessionMiddleware($cookieName, $this->cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ));
+ 'https://www.example.com/',
+ );
$session = null;
$next = static function (ServerRequestInterface $request) use (&$session): ResponseInterface {
+ self::assertInstanceOf(Session::class, $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME));
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->begin();
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->setContents(['foo' => 'bar']);
$session = $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME);
@@ -344,6 +330,7 @@ public function testSessionDoesntExistsAndStartingOne(): void
$middleware($request, $next);
+ self::assertInstanceOf(Session::class, $session);
self::assertCount(1, $this->cache->getData());
self::assertTrue($session->isActive());
self::assertSame([
@@ -351,81 +338,87 @@ public function testSessionDoesntExistsAndStartingOne(): void
], $this->cache->getData());
}
- public function testSessionExistsAndKeepingItAlive(): void
+ #[Test]
+ public function sessionExistsAndKeepingItAlive(): void
{
- $contents = ['Sand'];
+ $contents = ['type' => 'Sand'];
$cookieName = 'CookieMonster';
$this->cache->set('cookies', ['Chocolate Chip']);
$middleware = new SessionMiddleware($cookieName, $this->cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ))->withCookieParams([$cookieName => 'cookies']);
+ 'https://www.example.com/',
+ )->withCookieParams([$cookieName => 'cookies']);
$session = null;
$next = static function (ServerRequestInterface $request) use ($contents, &$session): ResponseInterface {
+ self::assertInstanceOf(Session::class, $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME));
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->setContents($contents);
$session = $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME);
return new Response();
};
- $response = $this->await($middleware($request, $next));
- assert($response instanceof ResponseInterface);
+ $response = await($middleware($request, $next));
- $sandCoookies = $this->await($this->cache->get('cookies'));
+ $sandCoookies = await($this->cache->get('cookies'));
+ self::assertInstanceOf(Session::class, $session);
self::assertCount(1, $this->cache->getData());
self::assertTrue($session->isActive());
self::assertSame($contents, $sandCoookies);
self::assertSame($cookieName . '=cookies', $response->getHeaderLine('Set-Cookie'));
}
- public function testSessionExistsAndEndingIt(): void
+ #[Test]
+ public function sessionExistsAndEndingIt(): void
{
$cookieName = 'CookieMonster';
$cache = new ArrayCache();
$cache->set('cookies', ['Chocolate Chip']);
$middleware = new SessionMiddleware($cookieName, $this->cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ))->withCookieParams([$cookieName => 'cookies']);
+ 'https://www.example.com/',
+ )->withCookieParams([$cookieName => 'cookies']);
$session = null;
$next = static function (ServerRequestInterface $request) use (&$session): ResponseInterface {
+ self::assertInstanceOf(Session::class, $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME));
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->end();
$session = $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME);
return new Response();
};
- $response = $this->await($middleware($request, $next));
- assert($response instanceof ResponseInterface);
+ $response = await($middleware($request, $next));
+ self::assertInstanceOf(Session::class, $session);
self::assertCount(0, $this->cache->getData());
self::assertFalse($session->isActive());
self::assertSame($cookieName . '=deleted; expires=Thu, 01 Jan 1970 00:00:01 GMT', $response->getHeaderLine('Set-Cookie'));
}
- public function testUpdateCacheDeletesOldIds(): void
+ #[Test]
+ public function updateCacheDeletesOldIds(): void
{
- $cache = $this->prophesize(CacheInterface::class);
- $cache->get(Argument::any())->shouldNotBeCalled();
- $cache->set(Argument::any(), Argument::any())->shouldBeCalled();
- $cache->delete(Argument::any())->shouldBeCalled()->willReturn(resolve(true));
+ $cache = Mockery::mock(CacheInterface::class);
+ $cache->shouldReceive('get')->never();
+ $cache->shouldReceive('set')->once();
+ $cache->shouldReceive('delete')->twice()->andReturn(resolve(true));
$cookieName = 'CookieMonster';
- $middleware = new SessionMiddleware($cookieName, $cache->reveal());
+ $middleware = new SessionMiddleware($cookieName, $cache);
$request = new ServerRequest(
'GET',
- 'https://www.example.com/'
+ 'https://www.example.com/',
);
$next = static function (ServerRequestInterface $request): ResponseInterface {
+ self::assertInstanceOf(Session::class, $request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME));
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->begin();
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->regenerate();
$request->getAttribute(SessionMiddleware::ATTRIBUTE_NAME)->regenerate();
@@ -433,50 +426,48 @@ public function testUpdateCacheDeletesOldIds(): void
return new Response();
};
- $this->await($middleware($request, $next));
+ await($middleware($request, $next));
}
- public function testASessionIdIsAlwaysCheckedForInTheCache(): void
+ #[Test]
+ public function aSessionIdIsAlwaysCheckedForInTheCache(): void
{
- $cache = $this->prophesize(CacheInterface::class);
- $cache->get('cookies')->shouldBeCalled();
- $cache->set(Argument::any(), Argument::any())->shouldBeCalled();
+ $cache = Mockery::mock(CacheInterface::class);
+ $cache->shouldReceive('get')->with('cookies')->once();
+ $cache->shouldReceive('set')->once();
$cookieName = 'CookieMonster';
- $middleware = new SessionMiddleware($cookieName, $cache->reveal());
+ $middleware = new SessionMiddleware($cookieName, $cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ))->withCookieParams([$cookieName => 'cookies']);
+ 'https://www.example.com/',
+ )->withCookieParams([$cookieName => 'cookies']);
- $next = static function (): ResponseInterface {
- return new Response();
- };
+ $next = (static fn (): ResponseInterface => new Response());
- $this->await($middleware($request, $next));
+ await($middleware($request, $next));
}
- public function testAnErrorFromTheCacheShouldBubbleUp(): void
+ #[Test]
+ public function anErrorFromTheCacheShouldBubbleUp(): void
{
self::expectException(Throwable::class);
self::expectExceptionMessage('Error on the cache layer');
- $cache = $this->prophesize(CacheInterface::class);
- $cache->get('cookies')->shouldBeCalled()->willReturn(reject(new Exception('Error on the cache layer')));
+ $cache = Mockery::mock(CacheInterface::class);
+ $cache->shouldReceive('get')->with('cookies')->once()->andReturn(reject(new Exception('Error on the cache layer')));
$cookieName = 'CookieMonster';
- $middleware = new SessionMiddleware($cookieName, $cache->reveal());
+ $middleware = new SessionMiddleware($cookieName, $cache);
- $request = (new ServerRequest(
+ $request = new ServerRequest(
'GET',
- 'https://www.example.com/'
- ))->withCookieParams([$cookieName => 'cookies']);
+ 'https://www.example.com/',
+ )->withCookieParams([$cookieName => 'cookies']);
- $next = static function (): ResponseInterface {
- return new Response();
- };
+ $next = (static fn (): ResponseInterface => new Response());
- $this->await($middleware($request, $next));
+ await($middleware($request, $next));
}
}
diff --git a/tests/SessionTest.php b/tests/SessionTest.php
index c15b210..9ea2905 100644
--- a/tests/SessionTest.php
+++ b/tests/SessionTest.php
@@ -5,6 +5,8 @@
namespace WyriHaximus\React\Tests\Http\Middleware;
use InvalidArgumentException;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Test;
use WyriHaximus\AsyncTestUtilities\AsyncTestCase;
use WyriHaximus\React\Http\Middleware\Session;
use WyriHaximus\React\Http\Middleware\SessionId\RandomBytes;
@@ -13,18 +15,17 @@
use function random_bytes;
use function strlen;
-/**
- * @internal
- */
final class SessionTest extends AsyncTestCase
{
- public function testId(): void
+ #[Test]
+ public function id(): void
{
$session = new Session('id', [], new RandomBytes());
self::assertSame('id', $session->getId());
}
- public function testData(): void
+ #[Test]
+ public function data(): void
{
$dataFirst = ['a' => 'b'];
@@ -36,7 +37,8 @@ public function testData(): void
self::assertSame($dataSecond, $session->getContents());
}
- public function testState(): void
+ #[Test]
+ public function state(): void
{
$session = new Session('', [], new RandomBytes());
self::assertFalse($session->isActive());
@@ -79,7 +81,8 @@ public function testState(): void
self::assertSame([], $session->getContents());
}
- public function testToFromArray(): void
+ #[Test]
+ public function toFromArray(): void
{
$session = new Session('', [], new RandomBytes());
@@ -90,7 +93,7 @@ public function testToFromArray(): void
'oldIds' => [],
'status' => 1,
],
- $session->toArray()
+ $session->toArray(),
);
$session->begin();
@@ -102,7 +105,7 @@ public function testToFromArray(): void
'oldIds' => [],
'status' => 2,
],
- $session->toArray()
+ $session->toArray(),
);
$newSession = $session->fromArray($session->toArray());
@@ -110,7 +113,8 @@ public function testToFromArray(): void
self::assertSame($session->toArray(), $newSession->toArray());
}
- public function testToFromArrayNoClone(): void
+ #[Test]
+ public function toFromArrayNoClone(): void
{
$session = new Session('', [], new RandomBytes());
@@ -121,7 +125,7 @@ public function testToFromArrayNoClone(): void
'oldIds' => [],
'status' => 1,
],
- $session->toArray()
+ $session->toArray(),
);
$session->begin();
@@ -133,7 +137,7 @@ public function testToFromArrayNoClone(): void
'oldIds' => [],
'status' => 2,
],
- $session->toArray()
+ $session->toArray(),
);
$newSession = $session->fromArray($session->toArray(), false);
@@ -141,10 +145,8 @@ public function testToFromArrayNoClone(): void
self::assertSame($session->toArray(), $newSession->toArray());
}
- /**
- * @return iterable>>
- */
- public function provideSessionArrayWithMissingItems(): iterable
+ /** @return iterable>> */
+ public static function provideSessionArrayWithMissingItems(): iterable
{
yield [
[
@@ -179,18 +181,17 @@ public function provideSessionArrayWithMissingItems(): iterable
];
}
- /**
- * @param array $session
- *
- * @dataProvider provideSessionArrayWithMissingItems
- */
- public function testFromArrayThrowsOnMissingElements(array $session): void
+ /** @param array $session */
+ #[DataProvider('provideSessionArrayWithMissingItems')]
+ #[Test]
+ public function fromArrayThrowsOnMissingElements(array $session): void
{
self::expectException(InvalidArgumentException::class);
- (new Session('', [], new RandomBytes()))->fromArray($session);
+ new Session('', [], new RandomBytes())->fromArray($session);
}
- public function testRegenerateShouldOnlyRegenerateWhenSessionIsActive(): void
+ #[Test]
+ public function regenerateShouldOnlyRegenerateWhenSessionIsActive(): void
{
$session = new Session('', [], new RandomBytes());
diff --git a/var/.gitkeep b/var/.gitkeep
new file mode 100644
index 0000000..e69de29