diff --git a/.github/actions/code-quality/action.yml b/.github/actions/code-quality/action.yml
index d67ff17e..e9f67134 100644
--- a/.github/actions/code-quality/action.yml
+++ b/.github/actions/code-quality/action.yml
@@ -4,21 +4,24 @@ inputs:
working-directory:
description: 'Directory to run composer and quality tools in'
required: true
+ php-version:
+ description: 'PHP version to use'
+ required: false
+ default: '7.4'
+ composer-options:
+ description: 'Additional composer options'
+ required: false
+ default: '--no-progress'
+
runs:
using: "composite"
steps:
- - name: Setup PHP
- uses: shivammathur/setup-php@v2
- with:
- php-version: '7.4'
- tools: composer:v2
- coverage: none
-
- - name: Install dependencies
- uses: ramsey/composer-install@v2
+ - name: Setup PHP with Cached Composer
+ uses: ./.github/actions/setup-php-composer
with:
+ php-version: ${{ inputs.php-version }}
working-directory: ${{ inputs.working-directory }}
- composer-options: "--no-progress"
+ composer-options: ${{ inputs.composer-options }}
- name: Run PHPStan
working-directory: ${{ inputs.working-directory }}
@@ -33,4 +36,4 @@ runs:
- name: Run PHP CodeSniffer
working-directory: ${{ inputs.working-directory }}
run: composer run-script check-cs
- shell: bash
\ No newline at end of file
+ shell: bash
diff --git a/.github/actions/codeception/action.yml b/.github/actions/codeception/action.yml
new file mode 100644
index 00000000..ff7ecc8d
--- /dev/null
+++ b/.github/actions/codeception/action.yml
@@ -0,0 +1,112 @@
+name: "Run Codeception Tests"
+description: "Sets up environment and runs Codeception test suites"
+inputs:
+ working-directory:
+ description: "Plugin directory to run tests in"
+ required: true
+ php:
+ description: "PHP version"
+ required: true
+ extensions:
+ description: "PHP extensions"
+ required: true
+ wordpress:
+ description: "WordPress version"
+ required: true
+ composer-options:
+ description: "Additional composer options"
+ required: false
+ default: "--no-progress"
+runs:
+ using: "composite"
+ steps:
+ - name: Setup PHP with Cached Composer
+ uses: ./.github/actions/setup-php-composer
+ with:
+ php-version: ${{ inputs.php }}
+ working-directory: ${{ inputs.working-directory }}
+ composer-options: ${{ inputs.composer-options }}
+
+ - name: Setup environment
+ run: |
+ cp ${{ inputs.working-directory }}/.docker/.env.ci ${{ inputs.working-directory }}/.env
+ cd ${{ inputs.working-directory }}
+ echo "INCLUDE_EXTENSIONS=${{ inputs.extensions }}" >> .env
+ echo "WP_VERSION=${{ inputs.wordpress }}" >> .env
+ echo "PHP_VERSION=${{ inputs.php }}" >> .env
+ shell: bash
+
+ - name: Build test environment
+ uses: nick-invision/retry@v2
+ with:
+ timeout_minutes: 10
+ max_attempts: 3
+ retry_on: error
+ shell: bash
+ command: |
+ cd ${{ inputs.working-directory }}
+ composer run docker:build
+ env:
+ WP_VERSION: ${{ inputs.wordpress }}
+ PHP_VERSION: ${{ inputs.php }}
+
+ - name: Start test environment
+ working-directory: ${{ inputs.working-directory }}
+ shell: bash
+ run: |
+ docker compose --env-file .env up --detach
+
+ CONTAINER_ID=$(docker compose ps -q wordpress)
+ if [ -n "$CONTAINER_ID" ]; then
+ docker exec $CONTAINER_ID init-docker.sh
+ else
+ echo "Error: WordPress container not found."
+ exit 1
+ fi
+ env:
+ WP_VERSION: ${{ inputs.wordpress }}
+ PHP_VERSION: ${{ inputs.php }}
+
+ - name: Run Acceptance Tests w/ Docker
+ working-directory: ${{ inputs.working-directory }}
+ shell: bash
+ run: |
+ docker exec \
+ --env DEBUG=${{ env.DEBUG }} \
+ --env SKIP_TESTS_CLEANUP=${{ env.SKIP_TESTS_CLEANUP }} \
+ --env SUITES=acceptance \
+ $(docker compose ps -q wordpress) \
+ bash -c "cd wp-content/plugins/$(basename $(echo ${{ inputs.working-directory }} | sed 's:/*$::')) && bin/run-codeception.sh"
+ env:
+ DEBUG: ${{ env.ACTIONS_STEP_DEBUG }}
+ SKIP_TESTS_CLEANUP: "true"
+ continue-on-error: true
+
+ - name: Run Functional Tests w/ Docker
+ working-directory: ${{ inputs.working-directory }}
+ shell: bash
+ run: |
+ docker exec \
+ --env DEBUG=${{ env.DEBUG }} \
+ --env SKIP_TESTS_CLEANUP=${{ env.SKIP_TESTS_CLEANUP }} \
+ --env SUITES=functional \
+ $(docker compose ps -q wordpress) \
+ bash -c "cd wp-content/plugins/$(basename ${{ inputs.working-directory }}) && bin/run-codeception.sh"
+ env:
+ DEBUG: ${{ env.ACTIONS_STEP_DEBUG }}
+ SKIP_TESTS_CLEANUP: "true"
+ continue-on-error: true
+
+ - name: Run WPUnit Tests w/ Docker
+ working-directory: ${{ inputs.working-directory }}
+ shell: bash
+ run: |
+ docker exec \
+ --env COVERAGE=${{ inputs.coverage }} \
+ --env USING_XDEBUG=${{ inputs.coverage }} \
+ --env DEBUG=${{ env.DEBUG }} \
+ --env SUITES=wpunit \
+ $(docker compose ps -q wordpress) \
+ bash -c "cd wp-content/plugins/$(basename ${{ inputs.working-directory }}) && bin/run-codeception.sh"
+ env:
+ DEBUG: ${{ env.ACTIONS_STEP_DEBUG }}
diff --git a/.github/actions/create-plugin-artifact/action.yml b/.github/actions/create-plugin-artifact/action.yml
index 5c36e38a..7c49459e 100644
--- a/.github/actions/create-plugin-artifact/action.yml
+++ b/.github/actions/create-plugin-artifact/action.yml
@@ -4,18 +4,23 @@ inputs:
slug:
description: 'Plugin slug (directory name under plugins/)'
required: true
+ composer-options:
+ description: 'Additional composer options'
+ required: false
+ default: '--no-progress'
runs:
using: "composite"
steps:
- - name: Set up PHP
- uses: shivammathur/setup-php@v2
+ - name: Setup PHP with Cached Composer
+ uses: ./.github/actions/setup-php-composer
with:
- php-version: '7.4'
+ php-version: ${{ inputs.php }}
+ working-directory: plugins/${{ inputs.slug }}
+ composer-options: ${{ inputs.composer-options }}
- - name: Install dependencies and build
+ - name: Create plugin artifact
working-directory: plugins/${{ inputs.slug }}
run: |
- composer install --no-dev --optimize-autoloader
echo "${GITHUB_SHA}" > build-sha.txt
rm -f plugin-build/${{ inputs.slug }}-*.zip
composer archive -vvv --format=zip --file="plugin-build/${{ inputs.slug }}" --dir="."
diff --git a/.github/actions/setup-php-composer/action.yml b/.github/actions/setup-php-composer/action.yml
new file mode 100644
index 00000000..22316749
--- /dev/null
+++ b/.github/actions/setup-php-composer/action.yml
@@ -0,0 +1,60 @@
+name: "Setup PHP with Cached Composer"
+description: "Setup PHP and install Composer dependencies with caching"
+inputs:
+ php-version:
+ description: "PHP version to setup"
+ required: false
+ default: "7.4"
+ working-directory:
+ description: "Working directory for composer install"
+ required: true
+ composer-options:
+ description: "Additional composer options"
+ required: false
+ default: "--no-progress --optimize-autoloader"
+ tools:
+ description: "Tools to install with PHP"
+ required: false
+ default: "composer:v2"
+
+runs:
+ using: "composite"
+ steps:
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ inputs.php-version }}
+ tools: ${{ inputs.tools }}
+ coverage: none
+
+ - name: Validate Composer File
+ shell: bash
+ working-directory: ${{ inputs.working-directory }}
+ run: |
+ if [ ! -f "composer.json" ]; then
+ echo "Error: composer.json missing in ${{ inputs.working-directory }}"
+ exit 1
+ fi
+
+ - name: Get Composer cache directory
+ id: composer-cache
+ shell: bash
+ working-directory: ${{ inputs.working-directory }}
+ run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
+
+ - name: Cache Composer dependencies
+ uses: actions/cache@v4
+ with:
+ path: |
+ ${{ steps.composer-cache.outputs.dir }}
+ ${{ inputs.working-directory }}/vendor
+ key: composer-${{ runner.os }}-php${{ inputs.php-version }}-${{ hashFiles(format('{0}/composer.lock', inputs.working-directory)) }}
+ restore-keys: |
+ composer-${{ runner.os }}-php${{ inputs.php-version }}-
+ composer-${{ runner.os }}-
+
+ - name: Install Composer dependencies
+ uses: ramsey/composer-install@v2
+ with:
+ working-directory: ${{ inputs.working-directory }}
+ composer-options: ${{ inputs.composer-options }}
diff --git a/.github/workflows/code-quality.yml b/.github/workflows/code-quality.yml
index 80275d2d..45afe165 100644
--- a/.github/workflows/code-quality.yml
+++ b/.github/workflows/code-quality.yml
@@ -1,9 +1,14 @@
name: Code Quality
on:
+ push:
+ branches:
+ - main
+ paths:
+ - 'plugins/**.php'
pull_request:
paths:
- - 'plugins/**'
+ - 'plugins/**.php'
jobs:
run:
diff --git a/.github/workflows/codeception.yml b/.github/workflows/codeception.yml
new file mode 100644
index 00000000..577f8ec2
--- /dev/null
+++ b/.github/workflows/codeception.yml
@@ -0,0 +1,58 @@
+name: Codeception
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - 'plugins/**.php'
+ pull_request:
+ paths:
+ - 'plugins/**.php'
+
+# Cancel previous workflow run groups that have not completed.
+concurrency:
+ # Group workflow runs by workflow name, along with the head branch ref of the pull request
+ # or otherwise the branch or tag ref.
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ continuous_integration:
+ runs-on: ubuntu-latest
+ name: WordPress ${{ matrix.wordpress }} on PHP ${{ matrix.php }}
+
+ strategy:
+ matrix:
+ php: ["8.3","8.2","8.1"]
+ wordpress: ["6.8","6.7","6.6","6.5"]
+ include:
+ - php: "8.2"
+ wordpress: "6.8"
+ coverage: 1
+ fail-fast: false
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Get changed plugin directory
+ id: plugin
+ run: |
+ git fetch --prune --unshallow
+ plugin=$(git diff --name-only ${{ github.event.pull_request.base.sha }} ${{ github.sha }} | grep '^plugins/' | head -1 | cut -d/ -f2)
+ echo "slug=$plugin" >> $GITHUB_OUTPUT
+
+ - name: Validate composer.json
+ run: |
+ if [ ! -f "plugins/${{ steps.plugin.outputs.slug }}/composer.json" ]; then
+ echo "Warning: composer.json missing in plugins/${{ steps.plugin.outputs.slug }}"
+ fi
+
+ - name: Run Codeception Tests
+ uses: ./.github/actions/codeception
+ with:
+ working-directory: plugins/${{ steps.plugin.outputs.slug }}
+ php: ${{ matrix.php }}
+ wordpress: ${{ matrix.wordpress }}
+ extensions: json,mbstring
diff --git a/plugins/hwp-previews/.docker/.env.ci b/plugins/hwp-previews/.docker/.env.ci
new file mode 100644
index 00000000..763cd57c
--- /dev/null
+++ b/plugins/hwp-previews/.docker/.env.ci
@@ -0,0 +1,59 @@
+PLUGIN_SLUG=hwp-previews
+
+# Configure these to match your existing testing environment or the one you want to create with Docker.
+## Usually, these values should match the ones in the `wp-config.php` file.
+## If using Local by Flywheel, you can `open AdminerEvo` and find the values in the URL: `http://localhost:{DB_PORT}/?username={DB_USER}&db={DB_NAME}`
+## NOTE: Codeception may modify or the database during testing. If you want to preserve your local data, create a new database and use that for the `DB_NAME`.
+DB_NAME=wordpress
+DB_HOST=mysql
+DB_USER=root
+DB_PASSWORD=password
+DB_PORT=3306
+
+# The local path to the WordPress root directory, the one containing the wp-load.php file.
+## This can be a relative path from the directory that contains the codeception.yml file, or an absolute path.
+## If you are using Local by Flywheel, you can find the path in the Local by Flywheel app under the site's settings.
+WORDPRESS_ROOT_DIR="/var/www/html"
+
+# This table prefix used by the WordPress site, and in Acceptance tests.
+WORDPRESS_TABLE_PREFIX=wp_
+
+# The URL and domain of the WordPress site, and in Acceptance tests.
+## If the port is in use, you can change it to a different port.
+WORDPRESS_URL=http://localhost
+WORDPRESS_DOMAIN=localhost
+WORDPRESS_ADMIN_PATH=/wp-admin
+
+# The username and password of the administrator user of the WordPress site, and in Acceptance tests.
+WORDPRESS_ADMIN_USER=admin
+WORDPRESS_ADMIN_PASSWORD=password
+WORDPRESS_ADMIN_EMAIL=admin@example.com
+
+# Tests will require a MySQL database to run.
+# Do not use a database that contains important data!
+WORDPRESS_DB_HOST=${DB_HOST}
+WORDPRESS_DB_USER=${DB_USER}
+WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
+WORDPRESS_DB_NAME=${DB_NAME}
+WORDPRESS_DB_PORT=${DB_PORT}
+
+# WPUnit tests will use these variables instead.
+# By default this is the same as WordPress
+TEST_DB_HOST=${WORDPRESS_DB_HOST}
+TEST_DB_USER=${WORDPRESS_DB_USER}
+TEST_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
+TEST_DB_NAME=${WORDPRESS_DB_NAME}
+TEST_DB_PORT=${WORDPRESS_DB_PORT}
+# The Integration suite will use this table prefix for the WordPress tables.
+TEST_TABLE_PREFIX=test_
+
+# The DSN used by Acceptance tests.
+TEST_DB_DSN="mysql:host=${TEST_DB_HOST};port=${TEST_DB_PORT};dbname=${TEST_DB_NAME}"
+
+# The following variables are used to determine test behavior.
+
+# Include 3rd party plugins (e.g. WooCommerce) in the tests.
+# Skips recreating the database before running the tests.
+SKIP_DB_CREATE=false
+# Skips configuring the WordPress installation
+SKIP_WP_SETUP=false
diff --git a/plugins/hwp-previews/.docker/Dockerfile b/plugins/hwp-previews/.docker/Dockerfile
new file mode 100644
index 00000000..48bc41ef
--- /dev/null
+++ b/plugins/hwp-previews/.docker/Dockerfile
@@ -0,0 +1,83 @@
+###############################################################################
+# Pre-configured WordPress Installation w/ HWP Previews Plugin
+# For testing only, use in production not recommended. #
+###############################################################################
+
+# Use build args to get the right wordpress + php image
+ARG WP_VERSION
+ARG PHP_VERSION
+
+FROM wordpress:${WP_VERSION:-6.8}-php${PHP_VERSION:-8.2}
+
+# Needed to specify the build args again after the FROM command.
+ARG WP_VERSION
+ARG PHP_VERSION
+
+# Save the build args for use by the runtime environment
+ENV WP_VERSION=${WP_VERSION}
+ENV PHP_VERSION=${PHP_VERSION}
+
+SHELL [ "/bin/bash", "-c" ]
+
+# Install required packages
+RUN apt-get update && \
+ apt-get -y install \
+ git \
+ ssh \
+ tar \
+ gzip \
+ mariadb-client \
+ net-tools
+
+# Needed for Codeception WPDB test integration.
+RUN docker-php-ext-install pdo pdo_mysql
+
+# Install XDebug 3
+RUN if [[ $PHP_VERSION == 7* ]]; then pecl install xdebug-3.1.5; else pecl install xdebug; fi \
+ && mkdir -p /usr/local/etc/php/conf.d/disabled \
+ && echo "zend_extension=xdebug" > /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ && echo "xdebug.mode=develop,debug,coverage" >> /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ && echo "xdebug.max_nesting_level=512" >> /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini \
+ ;
+
+# Set xdebug configuration off by default. Set USING_XDEBUG=1 in the runtime environment to enable it.
+ENV USING_XDEBUG=0
+
+# Install PCOV
+# This is needed for Codeception / PHPUnit to track code coverage
+RUN apt-get install zip unzip -y \
+ && pecl install pcov
+
+# Install Dockerize
+ENV DOCKERIZE_VERSION=v0.7.0
+RUN curl -L -O https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
+
+# Install composer
+COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer
+RUN chmod +x /usr/local/bin/composer
+
+# Install WP-CLI
+RUN curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar \
+ && chmod +x wp-cli.phar \
+ && mv wp-cli.phar /usr/local/bin/wp
+
+# Install nvm, Node.js, and npm
+ENV NVM_DIR=/usr/local/nvm
+ENV NODE_VERSION=20
+
+RUN mkdir -p $NVM_DIR
+RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash \
+ && . $NVM_DIR/nvm.sh \
+ && nvm install $NODE_VERSION \
+ && nvm use $NODE_VERSION \
+ && nvm alias default $NODE_VERSION \
+ && npm install -g npm
+
+# Setup the container for testing
+COPY init-docker.sh /usr/local/bin/
+RUN chmod +x /usr/local/bin/init-docker.sh
diff --git a/plugins/hwp-previews/.docker/init-docker.sh b/plugins/hwp-previews/.docker/init-docker.sh
new file mode 100644
index 00000000..7d09fd8e
--- /dev/null
+++ b/plugins/hwp-previews/.docker/init-docker.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+# Exit if any command fails.
+set -e
+
+# Wait for the database
+dockerize -wait tcp://"${WORDPRESS_DB_HOST}":3306 -timeout 1m
+
+# Get the current user
+
+cd "$WORDPRESS_ROOT_DIR/wp-content/plugins/$PLUGIN_SLUG"
+
+# Load NVM
+source $NVM_DIR/nvm.sh
+nvm use $NODE_VERSION
+
+# Setup the test environment
+chmod +x ./bin/install-test-env.sh
+
+bash -c "./bin/install-test-env.sh"
+
+echo "Setting permissions"
+chmod -R 777 "$WORDPRESS_ROOT_DIR/wp-content/plugins/$PLUGIN_SLUG"
+
+# Go back to the root directory
+cd "$WORDPRESS_ROOT_DIR"
diff --git a/plugins/hwp-previews/.env.dist b/plugins/hwp-previews/.env.dist
new file mode 100644
index 00000000..abdcf5c3
--- /dev/null
+++ b/plugins/hwp-previews/.env.dist
@@ -0,0 +1,65 @@
+PLUGIN_SLUG=hwp-previews
+
+# Configure these to match your existing testing environment or the one you want to create with Docker.
+## Usually, these values should match the ones in the `wp-config.php` file.
+## If using Local by Flywheel, you can `open AdminerEvo` and find the values in the URL: `http://localhost:{DB_PORT}/?username={DB_USER}&db={DB_NAME}`
+## NOTE: Codeception may modify or the database during testing. If you want to preserve your local data, create a new database and use that for the `DB_NAME`.
+DB_NAME=wordpress
+# localhost creates issues with wp config create command
+DB_HOST=127.0.0.1
+DB_USER=root
+DB_PASSWORD=password
+DB_PORT=3306
+
+# The local path to the WordPress root directory, the one containing the wp-load.php file.
+## This can be a relative path from the directory that contains the codeception.yml file, or an absolute path.
+## If you are using Local by Flywheel, you can find the path in the Local by Flywheel app under the site's settings.
+WORDPRESS_ROOT_DIR="/tmp/wordpress"
+
+# This table prefix used by the WordPress site, and in Acceptance tests.
+WORDPRESS_TABLE_PREFIX=wp_
+
+# The URL and domain of the WordPress site, and in Acceptance tests.
+## If the port is in use, you can change it to a different port.
+WORDPRESS_URL=http://localhost
+WORDPRESS_DOMAIN=localhost
+WORDPRESS_ADMIN_PATH=/wp-admin
+
+# The username and password of the administrator user of the WordPress site, and in Acceptance tests.
+WORDPRESS_ADMIN_USER=admin
+WORDPRESS_ADMIN_PASSWORD=password
+WORDPRESS_ADMIN_EMAIL=admin@example.com
+
+# Tests will require a MySQL database to run.
+# Do not use a database that contains important data!
+WORDPRESS_DB_HOST=${DB_HOST}
+WORDPRESS_DB_USER=${DB_USER}
+WORDPRESS_DB_PASSWORD=${DB_PASSWORD}
+WORDPRESS_DB_NAME=${DB_NAME}
+WORDPRESS_DB_PORT=${DB_PORT}
+
+# WPUnit tests will use these variables instead.
+# By default this is the same as WordPress
+TEST_DB_HOST=${WORDPRESS_DB_HOST}
+TEST_DB_USER=${WORDPRESS_DB_USER}
+TEST_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
+TEST_DB_NAME=${WORDPRESS_DB_NAME}
+TEST_DB_PORT=${WORDPRESS_DB_PORT}
+# The Integration suite will use this table prefix for the WordPress tables.
+TEST_TABLE_PREFIX=test_
+
+# The DSN used by Acceptance tests.
+TEST_DB_DSN="mysql:host=${TEST_DB_HOST};port=${TEST_DB_PORT};dbname=${TEST_DB_NAME}"
+
+# The following variables are used to determine test behavior.
+
+# Include 3rd party plugins (e.g. WooCommerce) in the tests.
+INCLUDE_EXTENSIONS=true
+# Skips recreating the database before running the tests.
+SKIP_DB_CREATE=false
+# Skips configuring the WordPress installation
+SKIP_WP_SETUP=false
+# Skips cleanup after the test suite run.
+SKIP_TESTS_CLEANUP=true
+# The default Codeception suite to run.
+SUITES=wpunit
diff --git a/plugins/hwp-previews/.gitignore b/plugins/hwp-previews/.gitignore
index 9eff8b54..199ced97 100644
--- a/plugins/hwp-previews/.gitignore
+++ b/plugins/hwp-previews/.gitignore
@@ -44,6 +44,11 @@ tests/*.suite.yml
coverage/*
build/
.log/
+c3.php
# Cache
phpcs-cache.json
+tests/_support/
+tests/_output/
+tests/_generated/
+tests/_data/
diff --git a/plugins/hwp-previews/ACTIONS_AND_FILTERS.md b/plugins/hwp-previews/ACTIONS_AND_FILTERS.md
index 492fc9e0..4318bb03 100644
--- a/plugins/hwp-previews/ACTIONS_AND_FILTERS.md
+++ b/plugins/hwp-previews/ACTIONS_AND_FILTERS.md
@@ -9,9 +9,9 @@
## PHP Filters
- `hwp_previews_register_parameters` - Allows modification of the URL parameters used for previews for the class `Preview_Parameter_Registry`
-- `hwp_previews_filter_post_type_setting` - Filter or modify what post types appear in the settings UI
- `hwp_previews_template_path` - To use our own template for iframe previews
- `hwp_previews_core` - Register or unregister URL parameters, and adjust types/statuses
+- `hwp_previews_filter_available_post_types` - Filter to modify the available post types for Previews.
- `hwp_previews_settings_group_option_key` - Filter to modify the settings group option key. Default is HWP_PREVIEWS_SETTINGS_KEY
- `hwp_previews_settings_group_settings_group` - Filter to modify the settings group name. Default is HWP_PREVIEWS_SETTINGS_GROUP
- `hwp_previews_settings_group_settings_config` - Filter to modify the settings array. See `Settings_Group`
@@ -21,7 +21,7 @@
- `hwp_previews_hooks_post_status_config` - Filter for post status config service for the Hook class
- `hwp_previews_hooks_preview_link_service` - Filter for preview link service for the Hook class
- `hwp_previews_hooks_post_statuses` - Filter for post statuses for previews for the Hook Class
-
+- `hwp_previews_settings_fields` - Allows a user to register, modify, or remove settings fields for the settings page
## Usage Examples
diff --git a/plugins/hwp-previews/README.md b/plugins/hwp-previews/README.md
index b8426b03..5422ea8e 100644
--- a/plugins/hwp-previews/README.md
+++ b/plugins/hwp-previews/README.md
@@ -86,3 +86,8 @@ To implement your own approach from scratch you can refer to the appropriate doc
---
+
+## Testing
+
+See [Testing.md](TESTING.md) for details on how to test the plugin.
+
diff --git a/plugins/hwp-previews/TESTING.md b/plugins/hwp-previews/TESTING.md
new file mode 100644
index 00000000..c855772e
--- /dev/null
+++ b/plugins/hwp-previews/TESTING.md
@@ -0,0 +1,165 @@
+# Testing HWP Previews
+
+This plugin uses [Codeception](https://codeception.com/) with [WPBrowser](https://wpbrowser.wptestkit.dev/) for automated testing.
+Tests are organized into suites for unit, integration (wpunit), functional, and acceptance testing.
+
+---
+
+## Test Suites
+
+- **unit**: Pure PHP unit tests, no WordPress loaded.
+- **wpunit**: Unit/integration tests with WordPress loaded.
+- **functional**: Simulates web requests, runs WordPress in a test environment.
+- **acceptance**: Browser-based tests (WPBrowser/WPWebDriver).
+
+Configuration files for each suite are in the `tests/` directory (e.g., `unit.suite.dist.yml`, `wpunit.suite.dist.yml`).
+
+---
+
+## Local Test Environment
+
+The plugin provides scripts to set up a local WordPress environment for testing, using Docker and environment variables defined in `.env.dist`.
+
+### Prerequisites
+
+- Docker (for local environment)
+- Composer
+- Node.js (for building assets, if needed)
+
+---
+
+## Setup
+
+1. **Copy and configure environment variables:**
+
+ ```bash
+ cp .env.dist .env
+ # Edit .env as needed for your local setup
+ ```
+
+
+2. **Set up the test WordPress environment:**
+
+ ```bash
+ bin/install-test-env.sh
+ ```
+
+ This script will:
+ - Create the test database (unless `SKIP_DB_CREATE=true`)
+ - Download and install WordPress in the directory specified by `WORDPRESS_ROOT_DIR`
+ - Symlink the plugin into the WordPress plugins directory
+ - Activate the plugin and set up test data
+
+---
+
+## Running Tests
+
+### Unit Tests
+
+Run unit tests (no WordPress loaded):
+
+```bash
+composer run test:unit
+# or
+vendor/bin/codecept run unit
+```
+
+### WPUnit (WordPress-aware Unit/Integration) Tests
+
+Run WPUnit tests (WordPress loaded):
+
+```bash
+composer run test:wpunit
+# or
+vendor/bin/codecept run wpunit
+```
+
+### Functional Tests
+
+Run functional tests (simulate web requests):
+
+```bash
+composer run test:functional
+# or
+vendor/bin/codecept run functional
+```
+
+### Acceptance Tests
+
+Run browser-based acceptance tests:
+
+```bash
+composer run test:acceptance
+# or
+vendor/bin/codecept run acceptance
+```
+
+### All Tests
+
+To run all suites:
+
+```bash
+composer run test
+# or
+vendor/bin/codecept run
+```
+
+---
+
+## Code Coverage
+
+To generate code coverage reports (requires Xdebug or PCOV):
+
+```bash
+# Example for wpunit suite
+SUITES=wpunit COVERAGE=1 bin/run-codeception.sh
+```
+
+Coverage output will be in `tests/_output/` or as specified by `COVERAGE_OUTPUT`.
+
+---
+
+## Useful Scripts
+
+- `bin/install-test-env.sh` — Sets up the WordPress test environment.
+- `bin/run-codeception.sh` — Runs Codeception tests inside the plugin directory.
+- `bin/local/run-unit-tests.sh` — Runs unit tests in Docker.
+- `bin/local/run-qa.sh` — Runs code quality checks (PHPStan, PHPCS, Psalm).
+
+---
+
+## Notes
+
+- The test database will be reset during setup. **Do not use a database with important data.**
+- You can customize which suites to run by setting the `SUITES` environment variable.
+- See `.env.dist` for all available environment variables and their descriptions.
+
+---
+
+```text
+tests/
+├── _data/ # Test data (e.g. DB dumps)
+├── _envs/ # Environment configs
+├── _output/ # Test output (logs, coverage)
+├── _support/ # Helper classes, modules
+├── acceptance/ # Acceptance test cases
+├── functional/ # Functional test cases
+├── unit/ # Unit test cases
+├── wpunit/ # WPUnit (WordPress-aware unit/integration) test cases
+├── acceptance.suite.dist.yml
+├── functional.suite.dist.yml
+├── unit.suite.dist.yml
+├── wpunit.suite.dist.yml
+└── wpunit/
+ └── bootstrap.php # Bootstrap for WPUnit tests
+
+bin/
+├── install-test-env.sh # Script to set up test WP environment
+├── run-codeception.sh # Script to run Codeception tests
+└── local/
+ ├── run-unit-tests.sh # Run unit tests in Docker
+ └── run-qa.sh # Run code quality checks
+
+.env.dist # Example environment variables for testing
+codeception.dist.yml # Main Codeception config
+```
diff --git a/plugins/hwp-previews/activation.php b/plugins/hwp-previews/activation.php
index 8d99551e..e4c1883d 100644
--- a/plugins/hwp-previews/activation.php
+++ b/plugins/hwp-previews/activation.php
@@ -5,7 +5,7 @@
* @package HWP\Previews
*/
-declare( strict_types = 1 );
+declare(strict_types=1);
/**
* Runs when the plugin is activated.
diff --git a/plugins/hwp-previews/bin/_lib.sh b/plugins/hwp-previews/bin/_lib.sh
new file mode 100644
index 00000000..b536d2e3
--- /dev/null
+++ b/plugins/hwp-previews/bin/_lib.sh
@@ -0,0 +1,46 @@
+#!/usr/bin/env bash
+
+set +u
+
+source ".env"
+
+##
+# Add error message formatting to a string, and echo it.
+#
+# @param {string} message The string to add formatting to.
+##
+error_message() {
+ echo -en "\033[31mERROR\033[0m: $1"
+}
+
+##
+# Add warning message formatting to a string, and echo it.
+#
+# @param {string} message The string to add formatting to.
+##
+warning_message() {
+ echo -en "\033[33mWARNING\033[0m: $1"
+}
+
+##
+# Add status message formatting to a string, and echo it.
+#
+# @param {string} message The string to add formatting to.
+##
+status_message() {
+ echo -en "\033[32mSTATUS\033[0m: $1"
+}
+
+##
+# Download a file from a URL.
+#
+# @param {string} $1 The URL to download.
+# @param {string} $2 The path to save the file.
+##
+download() {
+ if [ $(which curl) ]; then
+ curl -s "$1" >"$2"
+ elif [ $(which wget) ]; then
+ wget -nv -O "$2" "$1"
+ fi
+}
diff --git a/plugins/hwp-previews/bin/build-docker.sh b/plugins/hwp-previews/bin/build-docker.sh
new file mode 100644
index 00000000..17a2b1b9
--- /dev/null
+++ b/plugins/hwp-previews/bin/build-docker.sh
@@ -0,0 +1,62 @@
+#!/usr/bin/env bash
+
+set -eu
+
+##
+# Use this script through NPM scripts in the package.json, after installing the NPM and Composer Dependencies and updating the .env file.
+##
+print_usage_instructions() {
+ echo "Usage: ./build-docker.sh [OPTIONS]"
+ echo "Options:"
+ echo " -c Build without cache"
+ echo " -h Display this help message"
+ echo ""
+ echo "Example use:"
+ echo " npm run docker:build"
+ echo ""
+ echo " WP_VERSION=6.7 PHP_VERSION=8.2 npm run docker:build -- - c"
+ echo ""
+ echo " WP_VERSION=6.7 PHP_VERSION=8.2 bin/build-docker.sh -- c"
+ exit 1
+}
+
+
+if [[ ! -f ".env" ]]; then
+ echo "No .env file was detected. .env.dist has been copied to .env"
+ echo "Open the .env file and enter values to match your local environment"
+ cp .env.dist .env
+fi
+
+source .env
+
+while getopts ":ch" opt; do
+ case ${opt} in
+ c)
+ echo "Build with --no-cache"
+ BUILD_NO_CACHE=--no-cache
+ ;;
+ h)
+ print_usage_instructions
+ ;;
+ \?)
+ echo "Invalid flag: -$OPTARG" 1>&2
+ exit 1
+ ;;
+ *)
+ print_usage_instructions
+ ;;
+ esac
+done
+
+
+TAG=${TAG:-latest}
+WP_VERSION=${WP_VERSION:-6.7}
+PHP_VERSION=${PHP_VERSION:-8.2}
+
+BUILD_NO_CACHE=${BUILD_NO_CACHE:-}
+
+docker build $BUILD_NO_CACHE \
+ -t "${PLUGIN_SLUG}:${TAG}-wp${WP_VERSION}-php${PHP_VERSION}" \
+ --build-arg WP_VERSION="${WP_VERSION}" \
+ --build-arg PHP_VERSION="${PHP_VERSION}" \
+ ./.docker
diff --git a/plugins/hwp-previews/bin/install-plugins.sh b/plugins/hwp-previews/bin/install-plugins.sh
new file mode 100644
index 00000000..306debe6
--- /dev/null
+++ b/plugins/hwp-previews/bin/install-plugins.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+# Exit if any command fails.
+set -e
+
+source ".env"
+
+# WPGraphQL
+install_wpgraphql() {
+ if ! $( wp plugin is-installed wp-graphql --allow-root ); then
+ wp plugin install wp-graphql --allow-root
+ fi
+ wp plugin activate wp-graphql --allow-root
+}
+
+# Run the install functions.
+cd $WORDPRESS_ROOT_DIR
+
+install_wpgraphql
diff --git a/plugins/hwp-previews/bin/install-test-env.sh b/plugins/hwp-previews/bin/install-test-env.sh
new file mode 100644
index 00000000..186b6f1d
--- /dev/null
+++ b/plugins/hwp-previews/bin/install-test-env.sh
@@ -0,0 +1,239 @@
+#!/usr/bin/env bash
+
+# Exit if any command fails.
+set -e
+
+ORIGINAL_PATH=$(pwd)
+BASEDIR=$(dirname "$0")
+
+# Include common environment variables and functions
+source "${BASEDIR}/_lib.sh"
+
+# Common variables.
+TMPDIR=${TMPDIR-/tmp}
+TMPDIR=$(echo $TMPDIR | sed -e "s/\/$//")
+
+WP_DEBUG=${WP_DEBUG:-true}
+SCRIPT_DEBUG=${SCRIPT_DEBUG:-true}
+WP_VERSION=${WP_VERSION:-"latest"}
+
+##
+# Install the database.
+##
+install_db() {
+ if [ "${SKIP_DB_CREATE}" = "true" ]; then
+ return 0
+ fi
+
+ # parse DB_HOST for port or socket references
+ local PARTS=(${WORDPRESS_DB_HOST//\:/ })
+ local DB_HOSTNAME=${PARTS[0]}
+ local DB_SOCK_OR_PORT=${PARTS[1]}
+ local EXTRA=""
+
+ if ! [ -z $DB_HOSTNAME ]; then
+ if [ $(echo $DB_SOCK_OR_PORT | grep -e '^[0-9]\{1,\}$') ]; then
+ EXTRA=" --host=$DB_HOSTNAME --port=$DB_SOCK_OR_PORT --protocol=tcp"
+ elif ! [ -z $DB_SOCK_OR_PORT ]; then
+ EXTRA=" --socket=$DB_SOCK_OR_PORT"
+ elif ! [ -z $DB_HOSTNAME ]; then
+ EXTRA=" --host=$DB_HOSTNAME --protocol=tcp"
+ fi
+ fi
+
+ # create database
+ echo -e "$(status_message "Creating the database (if it does not exist)...")"
+
+ RESULT=$(mysql -u $WORDPRESS_DB_USER --password="$WORDPRESS_DB_PASSWORD" --skip-column-names -e "SHOW DATABASES LIKE '$WORDPRESS_DB_NAME'"$EXTRA)
+ if [ "$RESULT" != $WORDPRESS_DB_NAME ]; then
+ mysqladmin create $WORDPRESS_DB_NAME --user="$WORDPRESS_DB_USER" --password="$WORDPRESS_DB_PASSWORD"$EXTRA
+ fi
+}
+
+download() {
+ if [ $(which curl) ]; then
+ curl -s "$1" >"$2"
+ elif [ $(which wget) ]; then
+ wget -nv -O "$2" "$1"
+ fi
+}
+
+install_wordpress() {
+ # Create the WordPress root directory if it doesn't exist.
+ echo -e "$(status_message "Switching to the WordPress root directory $WORDPRESS_ROOT_DIR")"
+ mkdir -p "$WORDPRESS_ROOT_DIR"
+ cd "$WORDPRESS_ROOT_DIR" || { echo -e "$(error_message "Failed to enter directory: $WORDPRESS_ROOT_DIR")"; exit 1; }
+
+ # Download WordPress
+ if [[ $WP_VERSION == 'nightly' || $WP_VERSION == 'trunk' ]]; then
+ mkdir -p $TMPDIR/wordpress-nightly
+ download https://wordpress.org/nightly-builds/wordpress-latest.zip $TMPDIR/wordpress-nightly/wordpress-nightly.zip
+ unzip -q $TMPDIR/wordpress-nightly/wordpress-nightly.zip -d $TMPDIR/wordpress-nightly/
+ mv $TMPDIR/wordpress-nightly/wordpress/* $WORDPRESS_ROOT_DIR
+ else
+ if [ $WP_VERSION == 'latest' ]; then
+ local ARCHIVE_NAME='latest'
+ elif [[ $WP_VERSION =~ [0-9]+\.[0-9]+ ]]; then
+ # https serves multiple offers, whereas http serves single.
+ download https://api.wordpress.org/core/version-check/1.7/ $TMPDIR/wp-latest.json
+ if [[ $WP_VERSION =~ [0-9]+\.[0-9]+\.[0] ]]; then
+ # version x.x.0 means the first release of the major version, so strip off the .0 and download version x.x
+ LATEST_VERSION=${WP_VERSION%??}
+ else
+ # otherwise, scan the releases and get the most up to date minor version of the major release
+ local VERSION_ESCAPED=$(echo $WP_VERSION | sed 's/\./\\\\./g')
+ LATEST_VERSION=$(grep -o '"version":"'$VERSION_ESCAPED'[^"]*' $TMPDIR/wp-latest.json | sed 's/"version":"//' | head -1)
+ fi
+ if [[ -z "$LATEST_VERSION" ]]; then
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
+ else
+ local ARCHIVE_NAME="wordpress-$LATEST_VERSION"
+ fi
+ else
+ local ARCHIVE_NAME="wordpress-$WP_VERSION"
+ fi
+ download https://wordpress.org/${ARCHIVE_NAME}.tar.gz $TMPDIR/wordpress.tar.gz
+ tar --strip-components=1 -zxmf $TMPDIR/wordpress.tar.gz -C $WORDPRESS_ROOT_DIR
+ fi
+}
+
+configure_wordpress() {
+ if [ "${SKIP_WP_SETUP}" = "true" ]; then
+ echo -e "$(warning_message "Skipping WordPress setup...")"
+ return 0
+ fi
+
+ cd $WORDPRESS_ROOT_DIR
+
+ # Create a wp-config.php file if it doesn't exist.
+ if [ ! -f "wp-config.php" ]; then
+ echo -e "$(status_message "Creating wp-config.php file...")"
+ wp config create --dbname="$WORDPRESS_DB_NAME" --dbuser="$WORDPRESS_DB_USER" --dbpass="$WORDPRESS_DB_PASSWORD" --dbhost="$WORDPRESS_DB_HOST" --dbprefix="$WORDPRESS_TABLE_PREFIX" --allow-root
+ fi
+
+ # Install WordPress.
+ echo -e "$(status_message "Installing WordPress...")"
+
+ SITE_TITLE=${WORDPRESS_SITE_TITLE:-"HWP Preview Tests"}
+
+ wp core install --title="$SITE_TITLE" --admin_user="$WORDPRESS_ADMIN_USER" --admin_password="$WORDPRESS_ADMIN_PASSWORD" --admin_email="$WORDPRESS_ADMIN_EMAIL" --skip-email --url="$WORDPRESS_URL" --allow-root
+
+ echo -e "$(status_message "Running WordPress version: $(wp core version --allow-root) at $(wp option get home --allow-root)")"
+}
+
+setup_file_permissions() {
+ # Make sure the uploads and upgrade folders exist and we have permissions to add files.
+ echo -e "$(status_message "Ensuring that files can be uploaded...")"
+
+ mkdir -p \
+ wp-content/uploads \
+ wp-content/upgrade
+ chmod 777 \
+ wp-content \
+ wp-content/plugins \
+ wp-config.php \
+ wp-settings.php \
+ wp-content/uploads \
+ wp-content/upgrade
+
+ # Install a dummy favicon to avoid 404 errors.
+ echo -e "$(status_message "Installing a dummy favicon...")"
+ touch favicon.ico
+ chmod 767 favicon.ico
+}
+
+setup_plugin() {
+ if [ "${SKIP_WP_SETUP}" = "true" ]; then
+ echo -e "$(warning_message "Skipping hwp-previews installation...")"
+ return 0
+ fi
+
+ # Add this repo as a plugin to the repo
+ if [ ! -d $WORDPRESS_ROOT_DIR/wp-content/plugins/hwp-previews ]; then
+ echo -e "$(status_message "Symlinking the plugin to the WordPress plugins directory...")"
+
+ cd "$ORIGINAL_PATH"
+ ln -s "$(pwd)" "$WORDPRESS_ROOT_DIR/wp-content/plugins/$PLUGIN_SLUG"
+ fi
+
+ cd "$ORIGINAL_PATH"
+
+ # Install composer deps
+ echo -e "$(status_message "Installing Composer deps")"
+ composer install
+
+ if [ -f "package.json" ]; then
+ # Install npm deps
+ echo -e "$(status_message "Installing NPM Deps")"
+ npm install --no-audit --no-fund --no-progress
+
+ # Build the plugin
+ npm run build
+ fi
+}
+
+post_setup() {
+ # Ensure we are in the WordPress root directory.
+ cd "$WORDPRESS_ROOT_DIR"
+
+ # Activate the plugin.
+ echo -e "$(status_message "Activating the plugin...")"
+ wp plugin activate "$PLUGIN_SLUG" --allow-root
+
+ # Set pretty permalinks.
+ echo -e "$(status_message "Setting permalink structure...")"
+ wp rewrite structure '/%year%/%monthnum%/%postname%/' --hard --allow-root
+ wp rewrite flush --allow-root
+
+ wp config set WP_DEBUG true --raw --allow-root
+ wp config set WP_DEBUG_LOG true --raw --allow-root
+ wp config set GRAPHQL_DEBUG true --raw --allow-root
+
+ wp core update-db --allow-root
+
+ # Disable Update Checks
+ echo -e "$(status_message "Disabling update checks...")"
+ wp config set WP_AUTO_UPDATE_CORE false --raw --type=constant --quiet --allow-root
+ wp config set AUTOMATIC_UPDATER_DISABLED true --raw --type=constant --quiet --allow-root
+
+ # Export the db for codeception to use
+ SQLDUMP="$WORDPRESS_ROOT_DIR/wp-content/plugins/$PLUGIN_SLUG/tests/_data/dump.sql"
+ mkdir -p "$(dirname "$SQLDUMP")"
+ if [ ! -f "$SQLDUMP" ]; then
+ echo -e "$(status_message "Exporting test database dump...")"
+
+ wp db export "$SQLDUMP" --allow-root
+ fi
+
+ echo -e "$(status_message "Installed plugins")"
+ wp plugin list --allow-root
+}
+
+##
+# The main function to install the test environment.
+##
+
+echo "Installing test environment for WordPress ${WP_VERSION}..."
+
+# Create the database if it doesn't exist.
+install_db
+
+# If this is the test site, we reset the database so no posts/comments/etc.
+# dirty up the tests.
+if [ "$1" == '--reset-site' ]; then
+ echo -e "$(status_message "Resetting test database...")"
+ wp db reset --yes --quiet --allow-root
+fi
+
+install_wordpress
+configure_wordpress
+setup_file_permissions
+
+# Plugins are in a separate script to keep things clean.
+echo -e "$(status_message "Installing external plugins...")"
+cd "$ORIGINAL_PATH"
+
+bash "$ORIGINAL_PATH/$BASEDIR/install-plugins.sh"
+
+setup_plugin
+post_setup
diff --git a/plugins/hwp-previews/bin/local/run-qa.sh b/plugins/hwp-previews/bin/local/run-qa.sh
new file mode 100755
index 00000000..01449ba5
--- /dev/null
+++ b/plugins/hwp-previews/bin/local/run-qa.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+# Running PHP Code Quality Analysis locally
+composer run check-cs
+composer run phpstan
+composer run php:psalm
diff --git a/plugins/hwp-previews/bin/local/run-unit-tests.sh b/plugins/hwp-previews/bin/local/run-unit-tests.sh
new file mode 100755
index 00000000..14a73a3a
--- /dev/null
+++ b/plugins/hwp-previews/bin/local/run-unit-tests.sh
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+
+# Running Unit Tests for the HWP Previews Plugin
+
+# Usage:
+## - sh bin/local/run-unit-tests.sh
+## - sh bin/local/run-unit-tests.sh coverage --coverage-html
+
+# Check if Docker is running
+if ! docker info > /dev/null 2>&1; then
+ echo "Docker is not running. Please start Docker Desktop and try again."
+ open -a Docker
+ exit 1
+fi
+
+COVERAGE_ARG=""
+COVERAGE_OUTPUT_ARG=""
+
+if [[ "$1" == "coverage" ]]; then
+ COVERAGE_ARG="-e COVERAGE=1"
+ shift
+ if [[ -n "$1" ]]; then
+ COVERAGE_OUTPUT_ARG="-e COVERAGE_OUTPUT=$1"
+ fi
+fi
+
+docker exec $COVERAGE_ARG $COVERAGE_OUTPUT_ARG -e SUITES=wpunit -w /var/www/html/wp-content/plugins/hwp-previews hwp-previews-wordpress-1 bin/run-codeception.sh
diff --git a/plugins/hwp-previews/bin/run-codeception.sh b/plugins/hwp-previews/bin/run-codeception.sh
new file mode 100755
index 00000000..b2838a3f
--- /dev/null
+++ b/plugins/hwp-previews/bin/run-codeception.sh
@@ -0,0 +1,152 @@
+#!/usr/bin/env bash
+
+ORIGINAL_PATH=$(pwd)
+BASEDIR=$(dirname "$0")
+PROJECT_DIR="$WORDPRESS_ROOT_DIR/wp-content/plugins/$PLUGIN_SLUG"
+
+
+source "${BASEDIR}/_lib.sh"
+
+echo -e "$(status_message "WordPress: ${WP_VERSION} PHP: ${PHP_VERSION}")"
+
+##
+# Set up before running tests.
+##
+setup_before() {
+ cd "$PROJECT_DIR"
+
+ # Download c3 for testing.
+ if [ ! -f "c3.php" ]; then
+ echo "Downloading Codeception's c3.php"
+ curl -L 'https://raw.github.com/Codeception/c3/2.0/c3.php' > "c3.php"
+ fi
+
+ # Enable XDebug or PCOV for code coverage.
+ if [[ "$COVERAGE" == '1' ]]; then
+ if [[ "$USING_XDEBUG" == '1' ]]; then
+ echo "Enabling XDebug 3"
+ cp /usr/local/etc/php/conf.d/disabled/docker-php-ext-xdebug.ini /usr/local/etc/php/conf.d/
+ echo "xdebug.mode=coverage" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ else
+ echo "Using pcov/clobber for code coverage"
+ docker-php-ext-enable pcov
+ echo "pcov.enabled=1" >> /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini
+ echo "pcov.directory=${PROJECT_DIR}" >> /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini
+ COMPOSER_MEMORY_LIMIT=-1 composer require pcov/clobber --dev
+ vendor/bin/pcov clobber
+ fi
+ elif [[ -f /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini ]]; then
+ echo "Disabling XDebug"
+ rm /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ fi
+
+ # Install the PHP dev-dependencies.
+ if [ ! -d "vendor" ]; then
+ echo "Running composer install"
+ COMPOSER_MEMORY_LIMIT=-1 composer install
+ fi
+
+ # Set output permission
+ echo "Setting Codeception output directory permissions"
+ chmod 777 -R tests/_output
+}
+
+##
+# Run tests.
+##
+run_tests() {
+ if [[ -n "$DEBUG" ]]; then
+ local debug="--debug"
+ fi
+
+ local suites=$1
+ if [[ -z "$SUITES" ]]; then
+ echo "No test suites specified. Must specify variable SUITES."
+ exit 1
+ fi
+
+ if [[ -n "$COVERAGE" ]]; then
+ if [[ -n "$COVERAGE_OUTPUT" ]]; then
+ local coverage="--coverage --coverage-xml $COVERAGE_OUTPUT"
+ else
+ local coverage="--coverage --coverage-xml $suites-coverage.xml"
+ fi
+ fi
+
+ # If maintenance mode is active, de-activate it
+ if $(wp maintenance-mode is-active --allow-root); then
+ echo "Deactivating maintenance mode"
+ wp maintenance-mode deactivate --allow-root
+ fi
+
+
+ # Suites is the comma separated list of suites/tests to run.
+ echo "Running Test Suite $suites"
+ cd "$PROJECT_DIR"
+
+ # IMPORTANT: Build Codeception classes before running tests
+ echo "Building Codeception test classes"
+ vendor/bin/codecept build -c codeception.dist.yml
+
+ if [ $? -ne 0 ]; then
+ echo "Error: Codeception build failed"
+ exit 1
+ fi
+
+ XDEBUG_MODE=coverage vendor/bin/codecept run -c codeception.dist.yml ${suites} ${coverage:-} ${debug:-} --no-exit
+ if [ $? -ne 0 ]; then
+ echo "Error: Codeception tests failed with exit code $?"
+ exit 1
+ fi
+}
+
+##
+# Clean up after running tests.
+##
+cleanup_after() {
+ cd "$PROJECT_DIR"
+
+ # Remove c3.php if it exists and cleanup is not skipped
+ if [ -f "c3.php" ] && [ "$SKIP_TESTS_CLEANUP" != "true" ]; then
+ echo "Removing Codeception's c3.php"
+ rm "c3.php"
+ fi
+
+ # Disable XDebug or PCOV if they were enabled for code coverage
+ if [[ "$COVERAGE" == '1' ]]; then
+ if [[ "$USING_XDEBUG" == '1' ]]; then
+ echo "Disabling XDebug 3"
+ rm /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
+ else
+ echo "Disabling pcov/clobber"
+ docker-php-ext-disable pcov
+ sed -i '/pcov.enabled=1/d' /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini
+ sed -i '/pcov.directory=${PROJECT_DIR}/d' /usr/local/etc/php/conf.d/docker-php-ext-pcov.ini
+ COMPOSER_MEMORY_LIMIT=-1 composer remove pcov/clobber --dev
+ fi
+ fi
+
+ # Set output permission back to default
+ echo "Resetting Codeception output directory permissions"
+ chmod 777 -R tests/_output
+}
+
+# Prepare to run tests.
+echo "Setting up for Codeception tests"
+setup_before
+
+
+# Run the tests
+run_tests $SUITES
+
+# Clean up after running tests.
+echo "Cleaning up after Codeception tests"
+cleanup_after
+
+# Check results and exit accordingly.
+if [ -f "tests/_output/failed" ]; then
+ echo "Uh oh, Codeception tests failed."
+ exit 1
+else
+ echo "Woohoo! Codeception tests completed succesfully!"
+fi
diff --git a/plugins/hwp-previews/codeception.dist.yml b/plugins/hwp-previews/codeception.dist.yml
new file mode 100644
index 00000000..cf0411f5
--- /dev/null
+++ b/plugins/hwp-previews/codeception.dist.yml
@@ -0,0 +1,100 @@
+paths:
+ tests: tests
+ output: tests/_output
+ data: tests/_data
+ support: tests/_support
+ envs: tests/_envs
+actor_suffix: Tester
+params:
+ - .env
+settings:
+ colors: true
+ memory_limit: 1024M
+extensions:
+ enabled:
+ - Codeception\Extension\RunFailed
+ commands:
+ - lucatume\WPBrowser\Command\DbExport
+ - lucatume\WPBrowser\Command\DbImport
+ - lucatume\WPBrowser\Command\DevInfo
+ - lucatume\WPBrowser\Command\DevRestart
+ - lucatume\WPBrowser\Command\DevStart
+ - lucatume\WPBrowser\Command\DevStop
+ - lucatume\WPBrowser\Command\GenerateWPAjax
+ - lucatume\WPBrowser\Command\GenerateWPCanonical
+ - lucatume\WPBrowser\Command\GenerateWPRestApi
+ - lucatume\WPBrowser\Command\GenerateWPRestController
+ - lucatume\WPBrowser\Command\GenerateWPRestPostTypeController
+ - lucatume\WPBrowser\Command\GenerateWPUnit
+ - lucatume\WPBrowser\Command\GenerateWPXMLRPC
+ - lucatume\WPBrowser\Command\MonkeyCacheClear
+ - lucatume\WPBrowser\Command\MonkeyCachePath
+ - lucatume\WPBrowser\Command\RunAll
+ - lucatume\WPBrowser\Command\RunOriginal
+coverage:
+ enabled: true
+ remote: false
+ c3_url: "%WORDPRESS_URL%/wp-content/plugins/hwp-previews/hwp-previews.php"
+ include:
+ - src/*
+ - /access-functions.php
+ - /activation.php
+ - /deactivation.php
+ exclude:
+ - /bin/*
+ - /docs/*
+ - /node_modules/*
+ - /packages/*
+ - /tests/*
+ - /vendor-prefixed/*
+ - /vendor/*
+ show_only_summary: false
+modules:
+ config:
+ REST:
+ depends: lucatume\WPBrowser\Module\WPBrowser
+ url: "%WORDPRESS_URL%"
+ lucatume\WPBrowser\Module\WPFilesystem:
+ wpRootFolder: '%WORDPRESS_ROOT_DIR%'
+ themes: '/wp-content/themes'
+ plugins: '/wp-content/plugins'
+ mu-plugins: '/wp-content/mu-plugins'
+ uploads: '/wp-content/uploads'
+ lucatume\WPBrowser\Module\WPBrowser:
+ url: '%WORDPRESS_URL%'
+ adminUsername: '%WORDPRESS_ADMIN_USER%'
+ adminPassword: '%WORDPRESS_ADMIN_PASSWORD%'
+ adminPath: '/wp-admin'
+ headers:
+ X_WPBROWSER_REQUEST: 1
+ X_TEST_REQUEST: 1
+ X_APM_REQUEST: 1
+ connect_timeout: 3
+ cookies: false
+ lucatume\WPBrowser\Module\WPDb:
+ dsn: "%TEST_DB_DSN%"
+ user: "%TEST_DB_USER%"
+ password: "%TEST_DB_PASSWORD%"
+ populator: 'mysql -u $user -p$password -h $host $dbname < $dump'
+ dump: 'tests/_data/dump.sql'
+ populate: true
+ cleanup: true
+ waitlock: 0
+ url: "%WORDPRESS_URL%"
+ urlReplacement: true
+ tablePrefix: "%WORDPRESS_TABLE_PREFIX%"
+ lucatume\WPBrowser\Module\WPLoader:
+ wpRootFolder: "%WORDPRESS_ROOT_DIR%"
+ dbName: "%TEST_DB_NAME%"
+ dbHost: "%TEST_DB_HOST%"
+ dbUser: "%TEST_DB_USER%"
+ dbPassword: "%TEST_DB_PASSWORD%"
+ tablePrefix: "%TEST_TABLE_PREFIX%"
+ domain: "%WORDPRESS_DOMAIN%"
+ adminEmail: "%WORDPRESS_ADMIN_EMAIL%"
+ title: 'Test'
+ plugins:
+ - hwp-previews/hwp-previews.php
+ activatePlugins:
+ - hwp-previews/hwp-previews.php
+ configFile: 'tests/_data/config.php'
diff --git a/plugins/hwp-previews/composer.json b/plugins/hwp-previews/composer.json
index 801bc2bf..005b1c76 100644
--- a/plugins/hwp-previews/composer.json
+++ b/plugins/hwp-previews/composer.json
@@ -22,13 +22,27 @@
"prefer-stable": true,
"require-dev": {
"automattic/vipwpcs": "^3.0",
+ "codeception/lib-innerbrowser": "^1.0",
+ "codeception/module-asserts": "^1.0",
+ "codeception/module-cli": "^1.0",
+ "codeception/module-db": "^1.0",
+ "codeception/module-filesystem": "^1.0",
+ "codeception/module-phpbrowser": "^1.0",
+ "codeception/module-rest": "^2.0",
+ "codeception/module-webdriver": "^1.0",
+ "codeception/util-universalframework": "^1.0",
"dealerdirect/phpcodesniffer-composer-installer": "^1.0",
"humanmade/psalm-plugin-wordpress": "^3.1",
"johnpbloch/wordpress-core": "^6.8",
+ "lucatume/wp-browser": "^3.5",
+ "mockery/mockery": "^1.5",
+ "phpcompatibility/php-compatibility": "dev-develop as 9.99.99",
"phpcompatibility/phpcompatibility-wp": "^2.0",
"phpstan/phpstan-strict-rules": "^2.0",
"slevomat/coding-standard": "^8.0",
- "szepeviktor/phpstan-wordpress": "^2.0"
+ "szepeviktor/phpstan-wordpress": "^2.0",
+ "wp-cli/wp-cli-bundle": "^2.8.1",
+ "wp-graphql/wp-graphql-testcase": "^3.0.1"
},
"config": {
"allow-plugins": {
@@ -70,7 +84,12 @@
"/phpcs-cache.json",
"/Thumbs.db",
"/auth.json",
- "/.DS_Store"
+ "/.DS_Store",
+ ".docker/",
+ ".env.dist",
+ "c3.php",
+ "codeception.dist.yml",
+ "tests"
]
},
"autoload": {
@@ -81,12 +100,19 @@
"autoload-dev": {
"psr-4": {
"HWP\\Previews\\Unit\\": "tests/unit/",
+ "HWP\\Previews\\Functional\\": "tests/functional/",
"HWP\\Previews\\Integration\\": "tests/integration/",
"HWP\\Previews\\PHPStan\\": "phpstan/",
"HWPStandard\\": "phpcs/HWPStandard"
}
},
"scripts": {
+ "install-test-env": "bash bin/install-test-env.sh",
+ "delete-vendor-files": "rm -rf composer.lock vendor src/vendor-prefixed/*",
+ "docker:build": "bash bin/build-docker.sh",
+ "docker:start": "@docker:build && @docker:up",
+ "docker:stop": "docker compose down --volumes",
+ "docker:up": " sh -c 'composer docker:stop' && docker compose --env-file .env up --detach",
"lint": "vendor/bin/phpcs",
"phpcs-i": [
"php ./vendor/bin/phpcs -i"
@@ -104,8 +130,6 @@
"php:psalm:info": "psalm --show-info=true",
"php:psalm:fix": "psalm --alter"
},
- "scripts-descriptions": {
- },
"support": {
"docs": "https://github.com/wpengine/hwptoolkit/tree/main/docs",
"email": "headless-oss@wpengine.com",
diff --git a/plugins/hwp-previews/composer.lock b/plugins/hwp-previews/composer.lock
index bc8be856..d1103157 100644
--- a/plugins/hwp-previews/composer.lock
+++ b/plugins/hwp-previews/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "20a06157e4f2e734be6aa1f5d613a56c",
+ "content-hash": "6a6d9ee1f52084304a1ff6e820c6e2e1",
"packages": [],
"packages-dev": [
{
@@ -222,44 +222,39 @@
"time": "2024-05-10T20:31:09+00:00"
},
{
- "name": "composer/pcre",
- "version": "3.3.2",
+ "name": "behat/gherkin",
+ "version": "v4.10.0",
"source": {
"type": "git",
- "url": "https://github.com/composer/pcre.git",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
+ "url": "https://github.com/Behat/Gherkin.git",
+ "reference": "cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "url": "https://api.github.com/repos/Behat/Gherkin/zipball/cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6",
+ "reference": "cbb83c4c435dd8d05a161f2a5ae322e61b2f4db6",
"shasum": ""
},
"require": {
- "php": "^7.4 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<1.11.10"
+ "php": "~7.2|~8.0"
},
"require-dev": {
- "phpstan/phpstan": "^1.12 || ^2",
- "phpstan/phpstan-strict-rules": "^1 || ^2",
- "phpunit/phpunit": "^8 || ^9"
+ "cucumber/cucumber": "dev-gherkin-24.1.0",
+ "phpunit/phpunit": "~8|~9",
+ "symfony/yaml": "~3|~4|~5|~6|~7"
+ },
+ "suggest": {
+ "symfony/yaml": "If you want to parse features, represented in YAML files"
},
"type": "library",
"extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- },
"branch-alias": {
- "dev-main": "3.x-dev"
+ "dev-master": "4.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Composer\\Pcre\\": "src"
+ "psr-0": {
+ "Behat\\Gherkin": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -268,68 +263,91 @@
],
"authors": [
{
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
+ "name": "Konstantin Kudryashov",
+ "email": "ever.zet@gmail.com",
+ "homepage": "http://everzet.com"
}
],
- "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+ "description": "Gherkin DSL parser for PHP",
+ "homepage": "http://behat.org/",
"keywords": [
- "PCRE",
- "preg",
- "regex",
- "regular expression"
+ "BDD",
+ "Behat",
+ "Cucumber",
+ "DSL",
+ "gherkin",
+ "parser"
],
"support": {
- "issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.3.2"
+ "issues": "https://github.com/Behat/Gherkin/issues",
+ "source": "https://github.com/Behat/Gherkin/tree/v4.10.0"
},
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-12T16:29:46+00:00"
+ "time": "2024-10-19T14:46:06+00:00"
},
{
- "name": "composer/semver",
- "version": "3.4.3",
+ "name": "codeception/codeception",
+ "version": "4.2.2",
"source": {
"type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "url": "https://github.com/Codeception/Codeception.git",
+ "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/Codeception/Codeception/zipball/b88014f3348c93f3df99dc6d0967b0dbfa804474",
+ "reference": "b88014f3348c93f3df99dc6d0967b0dbfa804474",
"shasum": ""
},
"require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
+ "behat/gherkin": "^4.4.0",
+ "codeception/lib-asserts": "^1.0 | 2.0.*@dev",
+ "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.1.1 | ^9.0",
+ "codeception/stub": "^2.0 | ^3.0 | ^4.0",
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "guzzlehttp/psr7": "^1.4 | ^2.0",
+ "php": ">=5.6.0 <9.0",
+ "symfony/console": ">=2.7 <6.0",
+ "symfony/css-selector": ">=2.7 <6.0",
+ "symfony/event-dispatcher": ">=2.7 <6.0",
+ "symfony/finder": ">=2.7 <6.0",
+ "symfony/yaml": ">=2.7 <6.0"
},
"require-dev": {
- "phpstan/phpstan": "^1.11",
- "symfony/phpunit-bridge": "^3 || ^7"
+ "codeception/module-asserts": "^1.0 | 2.0.*@dev",
+ "codeception/module-cli": "^1.0 | 2.0.*@dev",
+ "codeception/module-db": "^1.0 | 2.0.*@dev",
+ "codeception/module-filesystem": "^1.0 | 2.0.*@dev",
+ "codeception/module-phpbrowser": "^1.0 | 2.0.*@dev",
+ "codeception/specify": "~0.3",
+ "codeception/util-universalframework": "*@dev",
+ "monolog/monolog": "~1.8",
+ "squizlabs/php_codesniffer": "~2.0",
+ "symfony/process": ">=2.7 <6.0",
+ "vlucas/phpdotenv": "^2.0 | ^3.0 | ^4.0 | ^5.0"
+ },
+ "suggest": {
+ "codeception/specify": "BDD-style code blocks",
+ "codeception/verify": "BDD-style assertions",
+ "hoa/console": "For interactive console functionality",
+ "stecman/symfony-console-completion": "For BASH autocompletion",
+ "symfony/phpunit-bridge": "For phpunit-bridge support"
},
+ "bin": [
+ "codecept"
+ ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
+ "branch-alias": []
},
"autoload": {
+ "files": [
+ "functions.php"
+ ],
"psr-4": {
- "Composer\\Semver\\": "src"
+ "Codeception\\": "src/Codeception",
+ "Codeception\\Extension\\": "ext"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -338,78 +356,56 @@
],
"authors": [
{
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
+ "name": "Michael Bodnarchuk",
+ "email": "davert@mail.ua",
+ "homepage": "https://codegyre.com"
}
],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
+ "description": "BDD-style testing framework",
+ "homepage": "https://codeception.com/",
"keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
+ "BDD",
+ "TDD",
+ "acceptance testing",
+ "functional testing",
+ "unit testing"
],
"support": {
- "irc": "ircs://irc.libera.chat:6697/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.3"
+ "issues": "https://github.com/Codeception/Codeception/issues",
+ "source": "https://github.com/Codeception/Codeception/tree/4.2.2"
},
"funding": [
{
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
+ "url": "https://opencollective.com/codeception",
+ "type": "open_collective"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2022-08-13T13:28:25+00:00"
},
{
- "name": "composer/xdebug-handler",
- "version": "3.0.5",
+ "name": "codeception/lib-asserts",
+ "version": "1.13.2",
"source": {
"type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
+ "url": "https://github.com/Codeception/lib-asserts.git",
+ "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
- "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "url": "https://api.github.com/repos/Codeception/lib-asserts/zipball/184231d5eab66bc69afd6b9429344d80c67a33b6",
+ "reference": "184231d5eab66bc69afd6b9429344d80c67a33b6",
"shasum": ""
},
"require": {
- "composer/pcre": "^1 || ^2 || ^3",
- "php": "^7.2.5 || ^8.0",
- "psr/log": "^1 || ^2 || ^3"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.0",
- "phpstan/phpstan-strict-rules": "^1.1",
- "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
+ "codeception/phpunit-wrapper": ">6.0.15 <6.1.0 | ^6.6.1 | ^7.7.1 | ^8.0.3 | ^9.0",
+ "ext-dom": "*",
+ "php": ">=5.6.0 <9.0"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -417,71 +413,63 @@
],
"authors": [
{
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "description": "Restarts a process without Xdebug.",
- "keywords": [
- "Xdebug",
- "performance"
- ],
- "support": {
- "irc": "ircs://irc.libera.chat:6697/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
+ "name": "Michael Bodnarchuk",
+ "email": "davert@mail.ua",
+ "homepage": "http://codegyre.com"
},
{
- "url": "https://github.com/composer",
- "type": "github"
+ "name": "Gintautas Miselis"
},
{
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
+ "name": "Gustavo Nieves",
+ "homepage": "https://medium.com/@ganieves"
}
],
- "time": "2024-05-06T16:37:16+00:00"
+ "description": "Assertion methods used by Codeception core and Asserts module",
+ "homepage": "https://codeception.com/",
+ "keywords": [
+ "codeception"
+ ],
+ "support": {
+ "issues": "https://github.com/Codeception/lib-asserts/issues",
+ "source": "https://github.com/Codeception/lib-asserts/tree/1.13.2"
+ },
+ "time": "2020-10-21T16:26:20+00:00"
},
{
- "name": "dealerdirect/phpcodesniffer-composer-installer",
- "version": "v1.0.0",
+ "name": "codeception/lib-innerbrowser",
+ "version": "1.5.1",
"source": {
"type": "git",
- "url": "https://github.com/PHPCSStandards/composer-installer.git",
- "reference": "4be43904336affa5c2f70744a348312336afd0da"
+ "url": "https://github.com/Codeception/lib-innerbrowser.git",
+ "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
- "reference": "4be43904336affa5c2f70744a348312336afd0da",
+ "url": "https://api.github.com/repos/Codeception/lib-innerbrowser/zipball/31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2",
+ "reference": "31b4b56ad53c3464fcb2c0a14d55a51a201bd3c2",
"shasum": ""
},
"require": {
- "composer-plugin-api": "^1.0 || ^2.0",
- "php": ">=5.4",
- "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
- },
- "require-dev": {
- "composer/composer": "*",
+ "codeception/codeception": "4.*@dev",
+ "ext-dom": "*",
"ext-json": "*",
- "ext-zip": "*",
- "php-parallel-lint/php-parallel-lint": "^1.3.1",
- "phpcompatibility/php-compatibility": "^9.0",
- "yoast/phpunit-polyfills": "^1.0"
+ "ext-mbstring": "*",
+ "php": ">=5.6.0 <9.0",
+ "symfony/browser-kit": ">=2.7 <6.0",
+ "symfony/dom-crawler": ">=2.7 <6.0"
},
- "type": "composer-plugin",
- "extra": {
- "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
+ "conflict": {
+ "codeception/codeception": "<4.0"
+ },
+ "require-dev": {
+ "codeception/util-universalframework": "dev-master"
},
+ "type": "library",
"autoload": {
- "psr-4": {
- "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -489,261 +477,267 @@
],
"authors": [
{
- "name": "Franck Nijhof",
- "email": "franck.nijhof@dealerdirect.com",
- "homepage": "http://www.frenck.nl",
- "role": "Developer / IT Manager"
+ "name": "Michael Bodnarchuk",
+ "email": "davert@mail.ua",
+ "homepage": "http://codegyre.com"
},
{
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
+ "name": "Gintautas Miselis"
}
],
- "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
- "homepage": "http://www.dealerdirect.com",
+ "description": "Parent library for all Codeception framework modules and PhpBrowser",
+ "homepage": "https://codeception.com/",
"keywords": [
- "PHPCodeSniffer",
- "PHP_CodeSniffer",
- "code quality",
- "codesniffer",
- "composer",
- "installer",
- "phpcbf",
- "phpcs",
- "plugin",
- "qa",
- "quality",
- "standard",
- "standards",
- "style guide",
- "stylecheck",
- "tests"
+ "codeception"
],
"support": {
- "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
- "source": "https://github.com/PHPCSStandards/composer-installer"
+ "issues": "https://github.com/Codeception/lib-innerbrowser/issues",
+ "source": "https://github.com/Codeception/lib-innerbrowser/tree/1.5.1"
},
- "time": "2023-01-05T11:28:13+00:00"
+ "time": "2021-08-30T15:21:42+00:00"
},
{
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
+ "name": "codeception/module-asserts",
+ "version": "1.3.1",
"source": {
"type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
+ "url": "https://github.com/Codeception/module-asserts.git",
+ "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "url": "https://api.github.com/repos/Codeception/module-asserts/zipball/59374f2fef0cabb9e8ddb53277e85cdca74328de",
+ "reference": "59374f2fef0cabb9e8ddb53277e85cdca74328de",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "codeception/codeception": "*@dev",
+ "codeception/lib-asserts": "^1.13.1",
+ "php": ">=5.6.0 <9.0"
},
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
+ "conflict": {
+ "codeception/codeception": "<4.0"
},
"type": "library",
"autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "implementation of xdg base directory specification for php",
+ "authors": [
+ {
+ "name": "Michael Bodnarchuk"
+ },
+ {
+ "name": "Gintautas Miselis"
+ },
+ {
+ "name": "Gustavo Nieves",
+ "homepage": "https://medium.com/@ganieves"
+ }
+ ],
+ "description": "Codeception module containing various assertions",
+ "homepage": "https://codeception.com/",
+ "keywords": [
+ "assertions",
+ "asserts",
+ "codeception"
+ ],
"support": {
- "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
- "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
+ "issues": "https://github.com/Codeception/module-asserts/issues",
+ "source": "https://github.com/Codeception/module-asserts/tree/1.3.1"
},
- "time": "2019-12-04T15:06:13+00:00"
+ "time": "2020-10-21T16:48:15+00:00"
},
{
- "name": "doctrine/deprecations",
- "version": "1.1.5",
+ "name": "codeception/module-cli",
+ "version": "1.1.1",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/deprecations.git",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
+ "url": "https://github.com/Codeception/module-cli.git",
+ "reference": "1f841ad4a1d43e5d9e60a43c4cc9e5af8008024f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
- "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "url": "https://api.github.com/repos/Codeception/module-cli/zipball/1f841ad4a1d43e5d9e60a43c4cc9e5af8008024f",
+ "reference": "1f841ad4a1d43e5d9e60a43c4cc9e5af8008024f",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "codeception/codeception": "*@dev",
+ "php": ">=5.6.0 <9.0"
},
"conflict": {
- "phpunit/phpunit": "<=7.5 || >=13"
- },
- "require-dev": {
- "doctrine/coding-standard": "^9 || ^12 || ^13",
- "phpstan/phpstan": "1.4.10 || 2.1.11",
- "phpstan/phpstan-phpunit": "^1.0 || ^2",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
- "psr/log": "^1 || ^2 || ^3"
- },
- "suggest": {
- "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ "codeception/codeception": "<4.0"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Doctrine\\Deprecations\\": "src"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
- "homepage": "https://www.doctrine-project.org/",
+ "authors": [
+ {
+ "name": "Michael Bodnarchuk"
+ }
+ ],
+ "description": "Codeception module for testing basic shell commands and shell output",
+ "homepage": "http://codeception.com/",
+ "keywords": [
+ "codeception"
+ ],
"support": {
- "issues": "https://github.com/doctrine/deprecations/issues",
- "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
+ "issues": "https://github.com/Codeception/module-cli/issues",
+ "source": "https://github.com/Codeception/module-cli/tree/1.1.1"
},
- "time": "2025-04-07T20:06:18+00:00"
+ "time": "2020-12-26T16:56:19+00:00"
},
{
- "name": "felixfbecker/advanced-json-rpc",
- "version": "v3.2.1",
+ "name": "codeception/module-db",
+ "version": "1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
- "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
+ "url": "https://github.com/Codeception/module-db.git",
+ "reference": "04c3e66fbd3a3ced17fcccc49627f6393a97b04b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
- "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
+ "url": "https://api.github.com/repos/Codeception/module-db/zipball/04c3e66fbd3a3ced17fcccc49627f6393a97b04b",
+ "reference": "04c3e66fbd3a3ced17fcccc49627f6393a97b04b",
"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"
+ "codeception/codeception": "*@dev",
+ "php": ">=5.6.0 <9.0"
},
- "require-dev": {
- "phpunit/phpunit": "^7.0 || ^8.0"
+ "conflict": {
+ "codeception/codeception": "<4.0"
},
"type": "library",
"autoload": {
- "psr-4": {
- "AdvancedJsonRpc\\": "lib/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
+ "MIT"
],
"authors": [
{
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
+ "name": "Michael Bodnarchuk"
+ },
+ {
+ "name": "Gintautas Miselis"
}
],
- "description": "A more advanced JSONRPC implementation",
+ "description": "DB module for Codeception",
+ "homepage": "http://codeception.com/",
+ "keywords": [
+ "codeception",
+ "database-testing",
+ "db-testing"
+ ],
"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/Codeception/module-db/issues",
+ "source": "https://github.com/Codeception/module-db/tree/1.2.0"
},
- "time": "2021-06-11T22:34:44+00:00"
+ "time": "2022-03-05T19:38:40+00:00"
},
{
- "name": "felixfbecker/language-server-protocol",
- "version": "v1.5.3",
+ "name": "codeception/module-filesystem",
+ "version": "1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
- "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9"
+ "url": "https://github.com/Codeception/module-filesystem.git",
+ "reference": "781be167fb1557bfc9b61e0a4eac60a32c534ec1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9",
- "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9",
+ "url": "https://api.github.com/repos/Codeception/module-filesystem/zipball/781be167fb1557bfc9b61e0a4eac60a32c534ec1",
+ "reference": "781be167fb1557bfc9b61e0a4eac60a32c534ec1",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "codeception/codeception": "^4.0",
+ "php": ">=5.6.0 <9.0",
+ "symfony/finder": ">=2.7 <6.0"
},
- "require-dev": {
- "phpstan/phpstan": "*",
- "squizlabs/php_codesniffer": "^3.1",
- "vimeo/psalm": "^4.0"
+ "conflict": {
+ "codeception/codeception": "<4.0"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
"autoload": {
- "psr-4": {
- "LanguageServerProtocol\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "ISC"
+ "MIT"
],
"authors": [
{
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
+ "name": "Michael Bodnarchuk"
+ },
+ {
+ "name": "Gintautas Miselis"
}
],
- "description": "PHP classes for the Language Server Protocol",
+ "description": "Codeception module for testing local filesystem",
+ "homepage": "http://codeception.com/",
"keywords": [
- "language",
- "microsoft",
- "php",
- "server"
+ "codeception",
+ "filesystem"
],
"support": {
- "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
- "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3"
+ "issues": "https://github.com/Codeception/module-filesystem/issues",
+ "source": "https://github.com/Codeception/module-filesystem/tree/1.0.3"
},
- "time": "2024-04-30T00:40:11+00:00"
+ "time": "2020-10-24T14:46:40+00:00"
},
{
- "name": "fidry/cpu-core-counter",
- "version": "1.2.0",
+ "name": "codeception/module-phpbrowser",
+ "version": "1.0.3",
"source": {
"type": "git",
- "url": "https://github.com/theofidry/cpu-core-counter.git",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f"
+ "url": "https://github.com/Codeception/module-phpbrowser.git",
+ "reference": "8ba6bede11d0914e74d98691f427fd8f397f192e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
- "reference": "8520451a140d3f46ac33042715115e290cf5785f",
+ "url": "https://api.github.com/repos/Codeception/module-phpbrowser/zipball/8ba6bede11d0914e74d98691f427fd8f397f192e",
+ "reference": "8ba6bede11d0914e74d98691f427fd8f397f192e",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0"
+ "codeception/codeception": "^4.1",
+ "codeception/lib-innerbrowser": "^1.3",
+ "guzzlehttp/guzzle": "^6.3|^7.0",
+ "php": ">=5.6.0 <9.0"
+ },
+ "conflict": {
+ "codeception/codeception": "<4.0"
},
"require-dev": {
- "fidry/makefile": "^0.2.0",
- "fidry/php-cs-fixer-config": "^1.1.2",
- "phpstan/extension-installer": "^1.2.0",
- "phpstan/phpstan": "^1.9.2",
- "phpstan/phpstan-deprecation-rules": "^1.0.0",
- "phpstan/phpstan-phpunit": "^1.2.2",
- "phpstan/phpstan-strict-rules": "^1.4.4",
- "phpunit/phpunit": "^8.5.31 || ^9.5.26",
- "webmozarts/strict-phpunit": "^7.5"
+ "codeception/module-rest": "^1.0"
+ },
+ "suggest": {
+ "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests"
},
"type": "library",
"autoload": {
- "psr-4": {
- "Fidry\\CpuCoreCounter\\": "src/"
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -751,66 +745,60 @@
],
"authors": [
{
- "name": "Théo FIDRY",
- "email": "theo.fidry@gmail.com"
+ "name": "Michael Bodnarchuk"
+ },
+ {
+ "name": "Gintautas Miselis"
}
],
- "description": "Tiny utility to get the number of CPU cores.",
+ "description": "Codeception module for testing web application over HTTP",
+ "homepage": "http://codeception.com/",
"keywords": [
- "CPU",
- "core"
+ "codeception",
+ "functional-testing",
+ "http"
],
"support": {
- "issues": "https://github.com/theofidry/cpu-core-counter/issues",
- "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
+ "issues": "https://github.com/Codeception/module-phpbrowser/issues",
+ "source": "https://github.com/Codeception/module-phpbrowser/tree/1.0.3"
},
- "funding": [
- {
- "url": "https://github.com/theofidry",
- "type": "github"
- }
- ],
- "time": "2024-08-06T10:04:20+00:00"
+ "time": "2022-05-21T13:50:41+00:00"
},
{
- "name": "humanmade/psalm-plugin-wordpress",
- "version": "3.1.2",
+ "name": "codeception/module-rest",
+ "version": "2.0.3",
"source": {
"type": "git",
- "url": "https://github.com/psalm/psalm-plugin-wordpress.git",
- "reference": "3f4689ad5264eee7b37121053cec810a3754f7e4"
+ "url": "https://github.com/Codeception/module-rest.git",
+ "reference": "ee4ea06cd8a5057f24f37f8bf25b6815ddc77840"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/psalm/psalm-plugin-wordpress/zipball/3f4689ad5264eee7b37121053cec810a3754f7e4",
- "reference": "3f4689ad5264eee7b37121053cec810a3754f7e4",
+ "url": "https://api.github.com/repos/Codeception/module-rest/zipball/ee4ea06cd8a5057f24f37f8bf25b6815ddc77840",
+ "reference": "ee4ea06cd8a5057f24f37f8bf25b6815ddc77840",
"shasum": ""
},
"require": {
- "ext-simplexml": "*",
- "php-stubs/wordpress-globals": "^0.2.0",
- "php-stubs/wordpress-stubs": "^6.0",
- "php-stubs/wp-cli-stubs": "^2.7",
- "vimeo/psalm": "^5 || ^6",
- "wp-hooks/wordpress-core": "^1.3.0"
+ "codeception/codeception": "^4.1",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "justinrainbow/json-schema": "~5.2.9",
+ "php": "^7.4 | ^8.0",
+ "softcreatr/jsonpath": "^0.5 | ^0.7 | ^0.8"
},
"require-dev": {
- "humanmade/coding-standards": "^1.2",
- "phpunit/phpunit": "^9.0",
- "psalm/plugin-phpunit": "^0.18.4"
+ "codeception/lib-innerbrowser": "^2.0",
+ "codeception/stub": "^4.0",
+ "codeception/util-universalframework": "^1.0"
},
- "type": "psalm-plugin",
- "extra": {
- "psalm": {
- "pluginClass": "PsalmWordPress\\Plugin"
- }
+ "suggest": {
+ "aws/aws-sdk-php": "For using AWS Auth"
},
+ "type": "library",
"autoload": {
- "psr-4": {
- "PsalmWordPress\\": [
- "."
- ]
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -818,708 +806,802 @@
],
"authors": [
{
- "name": "kkmuffme",
- "role": "Maintainer"
- },
- {
- "name": "Joe Hoyle",
- "role": "Creator"
+ "name": "Gintautas Miselis"
}
],
- "description": "WordPress stubs and plugin for Psalm static analysis.",
+ "description": "REST module for Codeception",
+ "homepage": "https://codeception.com/",
+ "keywords": [
+ "codeception",
+ "rest"
+ ],
"support": {
- "issues": "https://github.com/psalm/psalm-plugin-wordpress/issues",
- "source": "https://github.com/psalm/psalm-plugin-wordpress"
+ "issues": "https://github.com/Codeception/module-rest/issues",
+ "source": "https://github.com/Codeception/module-rest/tree/2.0.3"
},
- "time": "2024-04-01T10:36:11+00:00"
+ "time": "2023-03-10T19:23:22+00:00"
},
{
- "name": "johnpbloch/wordpress-core",
- "version": "6.8.0",
+ "name": "codeception/module-webdriver",
+ "version": "1.4.1",
"source": {
"type": "git",
- "url": "https://github.com/johnpbloch/wordpress-core.git",
- "reference": "74197a5012b0a72834ffc58bb32ef0045f15a26c"
+ "url": "https://github.com/Codeception/module-webdriver.git",
+ "reference": "e22ac7da756df659df6dd4fac2dff9c859e30131"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/74197a5012b0a72834ffc58bb32ef0045f15a26c",
- "reference": "74197a5012b0a72834ffc58bb32ef0045f15a26c",
+ "url": "https://api.github.com/repos/Codeception/module-webdriver/zipball/e22ac7da756df659df6dd4fac2dff9c859e30131",
+ "reference": "e22ac7da756df659df6dd4fac2dff9c859e30131",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "php": ">=7.2.24"
+ "codeception/codeception": "^4.0",
+ "php": ">=5.6.0 <9.0",
+ "php-webdriver/webdriver": "^1.8.0"
},
- "provide": {
- "wordpress/core-implementation": "6.8.0"
+ "suggest": {
+ "codeception/phpbuiltinserver": "Start and stop PHP built-in web server for your tests"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
},
- "type": "wordpress-core",
"notification-url": "https://packagist.org/downloads/",
"license": [
- "GPL-2.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "WordPress Community",
- "homepage": "https://wordpress.org/about/"
+ "name": "Michael Bodnarchuk"
+ },
+ {
+ "name": "Gintautas Miselis"
+ },
+ {
+ "name": "Zaahid Bateson"
}
],
- "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.",
- "homepage": "https://wordpress.org/",
+ "description": "WebDriver module for Codeception",
+ "homepage": "http://codeception.com/",
"keywords": [
- "blog",
- "cms",
- "wordpress"
+ "acceptance-testing",
+ "browser-testing",
+ "codeception"
],
"support": {
- "forum": "https://wordpress.org/support/",
- "irc": "irc://irc.freenode.net/wordpress",
- "issues": "https://core.trac.wordpress.org/",
- "source": "https://core.trac.wordpress.org/browser",
- "wiki": "https://codex.wordpress.org/"
+ "issues": "https://github.com/Codeception/module-webdriver/issues",
+ "source": "https://github.com/Codeception/module-webdriver/tree/1.4.1"
},
- "time": "2025-04-15T15:47:20+00:00"
+ "time": "2022-09-12T05:09:51+00:00"
},
{
- "name": "netresearch/jsonmapper",
- "version": "v4.5.0",
+ "name": "codeception/phpunit-wrapper",
+ "version": "9.0.9",
"source": {
"type": "git",
- "url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5"
+ "url": "https://github.com/Codeception/phpunit-wrapper.git",
+ "reference": "7439a53ae367986e9c22b2ac00f9d7376bb2f8cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
- "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
+ "url": "https://api.github.com/repos/Codeception/phpunit-wrapper/zipball/7439a53ae367986e9c22b2ac00f9d7376bb2f8cf",
+ "reference": "7439a53ae367986e9c22b2ac00f9d7376bb2f8cf",
"shasum": ""
},
"require": {
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=7.1"
+ "php": ">=7.2",
+ "phpunit/phpunit": "^9.0"
},
"require-dev": {
- "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0",
- "squizlabs/php_codesniffer": "~3.5"
+ "codeception/specify": "*",
+ "consolidation/robo": "^3.0.0-alpha3",
+ "vlucas/phpdotenv": "^3.0"
},
"type": "library",
"autoload": {
- "psr-0": {
- "JsonMapper": "src/"
+ "psr-4": {
+ "Codeception\\PHPUnit\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "OSL-3.0"
+ "MIT"
],
"authors": [
{
- "name": "Christian Weiske",
- "email": "cweiske@cweiske.de",
- "homepage": "http://github.com/cweiske/jsonmapper/",
- "role": "Developer"
+ "name": "Davert",
+ "email": "davert.php@resend.cc"
+ },
+ {
+ "name": "Naktibalda"
}
],
- "description": "Map nested JSON structures onto PHP classes",
+ "description": "PHPUnit classes used by Codeception",
"support": {
- "email": "cweiske@cweiske.de",
- "issues": "https://github.com/cweiske/jsonmapper/issues",
- "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0"
+ "issues": "https://github.com/Codeception/phpunit-wrapper/issues",
+ "source": "https://github.com/Codeception/phpunit-wrapper/tree/9.0.9"
},
- "time": "2024-09-08T10:13:13+00:00"
+ "abandoned": true,
+ "time": "2022-05-23T06:24:11+00:00"
},
{
- "name": "nikic/php-parser",
- "version": "v4.19.4",
+ "name": "codeception/stub",
+ "version": "4.0.2",
"source": {
"type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2"
+ "url": "https://github.com/Codeception/Stub.git",
+ "reference": "18a148dacd293fc7b044042f5aa63a82b08bff5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2",
- "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+ "url": "https://api.github.com/repos/Codeception/Stub/zipball/18a148dacd293fc7b044042f5aa63a82b08bff5d",
+ "reference": "18a148dacd293fc7b044042f5aa63a82b08bff5d",
"shasum": ""
},
"require": {
- "ext-tokenizer": "*",
- "php": ">=7.1"
+ "php": "^7.4 | ^8.0",
+ "phpunit/phpunit": "^8.4 | ^9.0 | ^10.0 | 10.0.x-dev"
},
"require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ "consolidation/robo": "^3.0"
},
- "bin": [
- "bin/php-parse"
- ],
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
"autoload": {
"psr-4": {
- "PhpParser\\": "lib/PhpParser"
+ "Codeception\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
+ "MIT"
],
+ "description": "Flexible Stub wrapper for PHPUnit's Mock Builder",
"support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4"
+ "issues": "https://github.com/Codeception/Stub/issues",
+ "source": "https://github.com/Codeception/Stub/tree/4.0.2"
},
- "time": "2024-09-29T15:01:53+00:00"
+ "time": "2022-01-31T19:25:15+00:00"
},
{
- "name": "php-stubs/wordpress-globals",
- "version": "v0.2.0",
+ "name": "codeception/util-universalframework",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/php-stubs/wordpress-globals.git",
- "reference": "748a1fb2ae8fda94844bd0545935095dbf404b32"
+ "url": "https://github.com/Codeception/util-universalframework.git",
+ "reference": "cc381f364c6d24f9b9c7b70a4c724949725f491a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-stubs/wordpress-globals/zipball/748a1fb2ae8fda94844bd0545935095dbf404b32",
- "reference": "748a1fb2ae8fda94844bd0545935095dbf404b32",
+ "url": "https://api.github.com/repos/Codeception/util-universalframework/zipball/cc381f364c6d24f9b9c7b70a4c724949725f491a",
+ "reference": "cc381f364c6d24f9b9c7b70a4c724949725f491a",
"shasum": ""
},
- "require-dev": {
- "php": "~7.1"
- },
- "suggest": {
- "php-stubs/wordpress-stubs": "Up-to-date WordPress function and class declaration stubs",
- "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
- },
"type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Global variables and global constants from WordPress core.",
- "homepage": "https://github.com/php-stubs/wordpress-globals",
- "keywords": [
- "PHPStan",
- "constants",
- "globals",
- "static analysis",
- "wordpress"
+ "authors": [
+ {
+ "name": "Gintautas Miselis"
+ }
],
+ "description": "Mock framework module used in internal Codeception tests",
+ "homepage": "http://codeception.com/",
"support": {
- "issues": "https://github.com/php-stubs/wordpress-globals/issues",
- "source": "https://github.com/php-stubs/wordpress-globals/tree/master"
+ "issues": "https://github.com/Codeception/util-universalframework/issues",
+ "source": "https://github.com/Codeception/util-universalframework/tree/1.0.0"
},
- "time": "2020-01-13T06:12:59+00:00"
+ "time": "2019-09-22T06:06:49+00:00"
},
{
- "name": "php-stubs/wordpress-stubs",
- "version": "v6.8.1",
+ "name": "composer/ca-bundle",
+ "version": "1.5.7",
"source": {
"type": "git",
- "url": "https://github.com/php-stubs/wordpress-stubs.git",
- "reference": "92e444847d94f7c30f88c60004648f507688acd5"
+ "url": "https://github.com/composer/ca-bundle.git",
+ "reference": "d665d22c417056996c59019579f1967dfe5c1e82"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/92e444847d94f7c30f88c60004648f507688acd5",
- "reference": "92e444847d94f7c30f88c60004648f507688acd5",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/d665d22c417056996c59019579f1967dfe5c1e82",
+ "reference": "d665d22c417056996c59019579f1967dfe5c1e82",
"shasum": ""
},
- "conflict": {
- "phpdocumentor/reflection-docblock": "5.6.1"
+ "require": {
+ "ext-openssl": "*",
+ "ext-pcre": "*",
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "nikic/php-parser": "^5.4",
- "php": "^7.4 || ^8.0",
- "php-stubs/generator": "^0.8.3",
- "phpdocumentor/reflection-docblock": "^5.4.1",
- "phpstan/phpstan": "^2.1",
- "phpunit/phpunit": "^9.5",
- "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.1.1",
- "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
- },
- "suggest": {
- "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
- "symfony/polyfill-php80": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ "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-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\CaBundle\\": "src"
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "WordPress function and class declaration stubs for static analysis.",
- "homepage": "https://github.com/php-stubs/wordpress-stubs",
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.",
"keywords": [
- "PHPStan",
- "static analysis",
- "wordpress"
+ "cabundle",
+ "cacert",
+ "certificate",
+ "ssl",
+ "tls"
],
"support": {
- "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
- "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.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.7"
},
- "time": "2025-05-02T12:33:34+00:00"
+ "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": "2025-05-26T15:08:54+00:00"
},
{
- "name": "php-stubs/wp-cli-stubs",
- "version": "v2.11.0",
+ "name": "composer/class-map-generator",
+ "version": "1.6.1",
"source": {
"type": "git",
- "url": "https://github.com/php-stubs/wp-cli-stubs.git",
- "reference": "f27ff9e8e29d7962cb070e58de70dfaf63183007"
+ "url": "https://github.com/composer/class-map-generator.git",
+ "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/f27ff9e8e29d7962cb070e58de70dfaf63183007",
- "reference": "f27ff9e8e29d7962cb070e58de70dfaf63183007",
+ "url": "https://api.github.com/repos/composer/class-map-generator/zipball/134b705ddb0025d397d8318a75825fe3c9d1da34",
+ "reference": "134b705ddb0025d397d8318a75825fe3c9d1da34",
"shasum": ""
},
"require": {
- "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0"
+ "composer/pcre": "^2.1 || ^3.1",
+ "php": "^7.2 || ^8.0",
+ "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7"
},
"require-dev": {
- "php": "~7.3 || ~8.0",
- "php-stubs/generator": "^0.8.0"
- },
- "suggest": {
- "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ "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"
},
"type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\ClassMapGenerator\\": "src"
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "WP-CLI function and class declaration stubs for static analysis.",
- "homepage": "https://github.com/php-stubs/wp-cli-stubs",
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "Utilities to scan PHP code and generate class maps.",
"keywords": [
- "PHPStan",
- "static analysis",
- "wordpress",
- "wp-cli"
+ "classmap"
],
"support": {
- "issues": "https://github.com/php-stubs/wp-cli-stubs/issues",
- "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.11.0"
+ "issues": "https://github.com/composer/class-map-generator/issues",
+ "source": "https://github.com/composer/class-map-generator/tree/1.6.1"
},
- "time": "2024-11-25T10:09:13+00:00"
+ "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": "2025-03-24T13:50:44+00:00"
},
{
- "name": "phpcompatibility/php-compatibility",
- "version": "9.3.5",
+ "name": "composer/composer",
+ "version": "2.7.7",
"source": {
"type": "git",
- "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
- "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
+ "url": "https://github.com/composer/composer.git",
+ "reference": "291942978f39435cf904d33739f98d7d4eca7b23"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
- "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
+ "url": "https://api.github.com/repos/composer/composer/zipball/291942978f39435cf904d33739f98d7d4eca7b23",
+ "reference": "291942978f39435cf904d33739f98d7d4eca7b23",
"shasum": ""
},
"require": {
- "php": ">=5.3",
- "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
- },
- "conflict": {
- "squizlabs/php_codesniffer": "2.6.2"
+ "composer/ca-bundle": "^1.0",
+ "composer/class-map-generator": "^1.3.3",
+ "composer/metadata-minifier": "^1.0",
+ "composer/pcre": "^2.1 || ^3.1",
+ "composer/semver": "^3.3",
+ "composer/spdx-licenses": "^1.5.7",
+ "composer/xdebug-handler": "^2.0.2 || ^3.0.3",
+ "justinrainbow/json-schema": "^5.2.11",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0",
+ "react/promise": "^2.8 || ^3",
+ "seld/jsonlint": "^1.4",
+ "seld/phar-utils": "^1.2",
+ "seld/signal-handler": "^2.0",
+ "symfony/console": "^5.4.11 || ^6.0.11 || ^7",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7",
+ "symfony/finder": "^5.4 || ^6.0 || ^7",
+ "symfony/polyfill-php73": "^1.24",
+ "symfony/polyfill-php80": "^1.24",
+ "symfony/polyfill-php81": "^1.24",
+ "symfony/process": "^5.4 || ^6.0 || ^7"
},
"require-dev": {
- "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
+ "phpstan/phpstan": "^1.11.0",
+ "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.1 || ^7.0.1"
},
"suggest": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
- "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ "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"
+ },
+ "bin": [
+ "bin/composer"
+ ],
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "phpstan/rules.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "2.7-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\": "src/Composer/"
+ }
},
- "type": "phpcodesniffer-standard",
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-3.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "Wim Godden",
- "homepage": "https://github.com/wimg",
- "role": "lead"
- },
- {
- "name": "Juliette Reinders Folmer",
- "homepage": "https://github.com/jrfnl",
- "role": "lead"
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "https://www.naderman.de"
},
{
- "name": "Contributors",
- "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
}
],
- "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
- "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+ "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": [
- "compatibility",
- "phpcs",
- "standards"
+ "autoload",
+ "dependency",
+ "package"
],
"support": {
- "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
- "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+ "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.7.7"
},
- "time": "2019-12-27T09:44:58+00:00"
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-06-10T20:11:12+00:00"
},
{
- "name": "phpcompatibility/phpcompatibility-paragonie",
- "version": "1.3.3",
+ "name": "composer/metadata-minifier",
+ "version": "1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
- "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac"
+ "url": "https://github.com/composer/metadata-minifier.git",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
- "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+ "url": "https://api.github.com/repos/composer/metadata-minifier/zipball/c549d23829536f0d0e984aaabbf02af91f443207",
+ "reference": "c549d23829536f0d0e984aaabbf02af91f443207",
"shasum": ""
},
"require": {
- "phpcompatibility/php-compatibility": "^9.0"
+ "php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "paragonie/random_compat": "dev-master",
- "paragonie/sodium_compat": "dev-master"
+ "composer/composer": "^2",
+ "phpstan/phpstan": "^0.12.55",
+ "symfony/phpunit-bridge": "^4.2 || ^5"
},
- "suggest": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
- "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\MetadataMinifier\\": "src"
+ }
},
- "type": "phpcodesniffer-standard",
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-3.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "Wim Godden",
- "role": "lead"
- },
- {
- "name": "Juliette Reinders Folmer",
- "role": "lead"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
- "homepage": "http://phpcompatibility.com/",
+ "description": "Small utility library that handles metadata minification and expansion.",
"keywords": [
- "compatibility",
- "paragonie",
- "phpcs",
- "polyfill",
- "standards",
- "static analysis"
+ "composer",
+ "compression"
],
"support": {
- "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
- "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy",
- "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
+ "issues": "https://github.com/composer/metadata-minifier/issues",
+ "source": "https://github.com/composer/metadata-minifier/tree/1.0.0"
},
"funding": [
{
- "url": "https://github.com/PHPCompatibility",
- "type": "github"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "url": "https://github.com/jrfnl",
+ "url": "https://github.com/composer",
"type": "github"
},
{
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "time": "2024-04-24T21:30:46+00:00"
+ "time": "2021-04-07T13:37:33+00:00"
},
{
- "name": "phpcompatibility/phpcompatibility-wp",
- "version": "2.1.6",
+ "name": "composer/pcre",
+ "version": "3.3.2",
"source": {
"type": "git",
- "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
- "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469"
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/80ccb1a7640995edf1b87a4409fa584cd5869469",
- "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
"shasum": ""
},
"require": {
- "phpcompatibility/php-compatibility": "^9.0",
- "phpcompatibility/phpcompatibility-paragonie": "^1.0"
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<1.11.10"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0"
+ "phpstan/phpstan": "^1.12 || ^2",
+ "phpstan/phpstan-strict-rules": "^1 || ^2",
+ "phpunit/phpunit": "^8 || ^9"
},
- "suggest": {
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
- "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Pcre\\": "src"
+ }
},
- "type": "phpcodesniffer-standard",
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-3.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "Wim Godden",
- "role": "lead"
- },
- {
- "name": "Juliette Reinders Folmer",
- "role": "lead"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
}
],
- "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
- "homepage": "http://phpcompatibility.com/",
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
"keywords": [
- "compatibility",
- "phpcs",
- "standards",
- "static analysis",
- "wordpress"
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
],
"support": {
- "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
- "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy",
- "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.3.2"
},
"funding": [
{
- "url": "https://github.com/PHPCompatibility",
- "type": "github"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "url": "https://github.com/jrfnl",
+ "url": "https://github.com/composer",
"type": "github"
},
{
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "time": "2025-01-16T22:34:19+00:00"
+ "time": "2024-11-12T16:29:46+00:00"
},
{
- "name": "phpcsstandards/phpcsextra",
- "version": "1.2.1",
+ "name": "composer/semver",
+ "version": "3.4.3",
"source": {
"type": "git",
- "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
- "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489"
+ "url": "https://github.com/composer/semver.git",
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
- "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+ "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
"shasum": ""
},
"require": {
- "php": ">=5.4",
- "phpcsstandards/phpcsutils": "^1.0.9",
- "squizlabs/php_codesniffer": "^3.8.0"
+ "php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.3.2",
- "phpcsstandards/phpcsdevcs": "^1.1.6",
- "phpcsstandards/phpcsdevtools": "^1.2.1",
- "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
- "type": "phpcodesniffer-standard",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-stable": "1.x-dev",
- "dev-develop": "1.x-dev"
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Semver\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-3.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "Juliette Reinders Folmer",
- "homepage": "https://github.com/jrfnl",
- "role": "lead"
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
},
{
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
}
],
- "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
+ "description": "Semver library that offers utilities, version constraint parsing and validation.",
"keywords": [
- "PHP_CodeSniffer",
- "phpcbf",
- "phpcodesniffer-standard",
- "phpcs",
- "standards",
- "static analysis"
+ "semantic",
+ "semver",
+ "validation",
+ "versioning"
],
"support": {
- "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
- "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
- "source": "https://github.com/PHPCSStandards/PHPCSExtra"
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/semver/issues",
+ "source": "https://github.com/composer/semver/tree/3.4.3"
},
"funding": [
{
- "url": "https://github.com/PHPCSStandards",
- "type": "github"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "url": "https://github.com/jrfnl",
+ "url": "https://github.com/composer",
"type": "github"
},
{
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "time": "2023-12-08T16:49:07+00:00"
+ "time": "2024-09-19T14:15:21+00:00"
},
{
- "name": "phpcsstandards/phpcsutils",
- "version": "1.0.12",
+ "name": "composer/spdx-licenses",
+ "version": "1.5.9",
"source": {
"type": "git",
- "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
- "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c"
+ "url": "https://github.com/composer/spdx-licenses.git",
+ "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c",
- "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c",
+ "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/edf364cefe8c43501e21e88110aac10b284c3c9f",
+ "reference": "edf364cefe8c43501e21e88110aac10b284c3c9f",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
- "php": ">=5.4",
- "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev"
+ "php": "^5.3.2 || ^7.0 || ^8.0"
},
"require-dev": {
- "ext-filter": "*",
- "php-parallel-lint/php-console-highlighter": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.3.2",
- "phpcsstandards/phpcsdevcs": "^1.1.6",
- "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
- "type": "phpcodesniffer-standard",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-stable": "1.x-dev",
- "dev-develop": "1.x-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
- "classmap": [
- "PHPCSUtils/"
- ]
+ "psr-4": {
+ "Composer\\Spdx\\": "src"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "LGPL-3.0-or-later"
+ "MIT"
],
"authors": [
{
- "name": "Juliette Reinders Folmer",
- "homepage": "https://github.com/jrfnl",
- "role": "lead"
+ "name": "Nils Adermann",
+ "email": "naderman@naderman.de",
+ "homepage": "http://www.naderman.de"
},
{
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ },
+ {
+ "name": "Rob Bast",
+ "email": "rob.bast@gmail.com",
+ "homepage": "http://robbast.nl"
}
],
- "description": "A suite of utility functions for use with PHP_CodeSniffer",
- "homepage": "https://phpcsutils.com/",
+ "description": "SPDX licenses list and validation library.",
"keywords": [
- "PHP_CodeSniffer",
- "phpcbf",
- "phpcodesniffer-standard",
- "phpcs",
- "phpcs3",
- "standards",
- "static analysis",
- "tokens",
- "utility"
+ "license",
+ "spdx",
+ "validator"
],
"support": {
- "docs": "https://phpcsutils.com/",
- "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
- "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
- "source": "https://github.com/PHPCSStandards/PHPCSUtils"
+ "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.9"
},
"funding": [
{
- "url": "https://github.com/PHPCSStandards",
- "type": "github"
+ "url": "https://packagist.com",
+ "type": "custom"
},
{
- "url": "https://github.com/jrfnl",
+ "url": "https://github.com/composer",
"type": "github"
},
{
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
}
],
- "time": "2024-05-20T13:34:27+00:00"
+ "time": "2025-05-12T21:07:07+00:00"
},
{
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
+ "name": "composer/xdebug-handler",
+ "version": "3.0.5",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ "url": "https://github.com/composer/xdebug-handler.git",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef",
+ "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef",
"shasum": ""
},
"require": {
- "php": "^7.2 || ^8.0"
+ "composer/pcre": "^1 || ^2 || ^3",
+ "php": "^7.2.5 || ^8.0",
+ "psr/log": "^1 || ^2 || ^3"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
+ "require-dev": {
+ "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-strict-rules": "^1.1",
+ "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
+ "Composer\\XdebugHandler\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1528,66 +1610,70 @@
],
"authors": [
{
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
+ "name": "John Stevenson",
+ "email": "john-stevenson@blueyonder.co.uk"
}
],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
+ "description": "Restarts a process without Xdebug.",
"keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
+ "Xdebug",
+ "performance"
],
"support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ "irc": "ircs://irc.libera.chat:6697/composer",
+ "issues": "https://github.com/composer/xdebug-handler/issues",
+ "source": "https://github.com/composer/xdebug-handler/tree/3.0.5"
},
- "time": "2020-06-27T09:03:43+00:00"
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-05-06T16:37:16+00:00"
},
{
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.6.2",
+ "name": "dealerdirect/phpcodesniffer-composer-installer",
+ "version": "v1.0.0",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
+ "url": "https://github.com/PHPCSStandards/composer-installer.git",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
- "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da",
+ "reference": "4be43904336affa5c2f70744a348312336afd0da",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^1.1",
- "ext-filter": "*",
- "php": "^7.4 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.7",
- "phpstan/phpdoc-parser": "^1.7|^2.0",
- "webmozart/assert": "^1.9.1"
+ "composer-plugin-api": "^1.0 || ^2.0",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0"
},
"require-dev": {
- "mockery/mockery": "~1.3.5 || ~1.6.0",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-mockery": "^1.1",
- "phpstan/phpstan-webmozart-assert": "^1.2",
- "phpunit/phpunit": "^9.5",
- "psalm/phar": "^5.26"
+ "composer/composer": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php-parallel-lint/php-parallel-lint": "^1.3.1",
+ "phpcompatibility/php-compatibility": "^9.0",
+ "yoast/phpunit-polyfills": "^1.0"
},
- "type": "library",
+ "type": "composer-plugin",
"extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
+ "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin"
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": "src"
+ "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -1596,546 +1682,624 @@
],
"authors": [
{
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
+ "name": "Franck Nijhof",
+ "email": "franck.nijhof@dealerdirect.com",
+ "homepage": "http://www.frenck.nl",
+ "role": "Developer / IT Manager"
},
{
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors"
}
],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "description": "PHP_CodeSniffer Standards Composer Installer Plugin",
+ "homepage": "http://www.dealerdirect.com",
+ "keywords": [
+ "PHPCodeSniffer",
+ "PHP_CodeSniffer",
+ "code quality",
+ "codesniffer",
+ "composer",
+ "installer",
+ "phpcbf",
+ "phpcs",
+ "plugin",
+ "qa",
+ "quality",
+ "standard",
+ "standards",
+ "style guide",
+ "stylecheck",
+ "tests"
+ ],
"support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
+ "issues": "https://github.com/PHPCSStandards/composer-installer/issues",
+ "source": "https://github.com/PHPCSStandards/composer-installer"
},
- "time": "2025-04-13T19:20:35+00:00"
+ "time": "2023-01-05T11:28:13+00:00"
},
{
- "name": "phpdocumentor/type-resolver",
- "version": "1.10.0",
+ "name": "dnoegel/php-xdg-base-dir",
+ "version": "v0.1.1",
"source": {
"type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
+ "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
- "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
+ "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.3 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0",
- "phpstan/phpdoc-parser": "^1.18|^2.0"
+ "php": ">=5.3.2"
},
"require-dev": {
- "ext-tokenizer": "*",
- "phpbench/phpbench": "^1.2",
- "phpstan/extension-installer": "^1.1",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpunit/phpunit": "^9.5",
- "rector/rector": "^0.13.9",
- "vimeo/psalm": "^4.25"
+ "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": "src"
+ "XdgBaseDir\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "description": "implementation of xdg base directory specification for php",
"support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
+ "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
+ "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
},
- "time": "2024-11-09T15:12:26+00:00"
+ "time": "2019-12-04T15:06:13+00:00"
},
{
- "name": "phpstan/phpdoc-parser",
- "version": "2.1.0",
+ "name": "doctrine/deprecations",
+ "version": "1.1.5",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
- "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
+ "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38",
"shasum": ""
},
"require": {
- "php": "^7.4 || ^8.0"
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<=7.5 || >=13"
},
"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"
+ "doctrine/coding-standard": "^9 || ^12 || ^13",
+ "phpstan/phpstan": "1.4.10 || 2.1.11",
+ "phpstan/phpstan-phpunit": "^1.0 || ^2",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12",
+ "psr/log": "^1 || ^2 || ^3"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
},
"type": "library",
"autoload": {
"psr-4": {
- "PHPStan\\PhpDocParser\\": [
- "src/"
- ]
+ "Doctrine\\Deprecations\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHPDoc parser with support for nullable, intersection and generic types",
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
"support": {
- "issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0"
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/1.1.5"
},
- "time": "2025-02-19T13:28:12+00:00"
+ "time": "2025-04-07T20:06:18+00:00"
},
{
- "name": "phpstan/phpstan",
- "version": "2.1.12",
+ "name": "doctrine/instantiator",
+ "version": "1.5.0",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan.git",
- "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c"
+ "url": "https://github.com/doctrine/instantiator.git",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/96dde49e967c0c22812bcfa7bda4ff82c09f3b0c",
- "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
+ "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": ""
},
"require": {
- "php": "^7.4|^8.0"
+ "php": "^7.1 || ^8.0"
},
- "conflict": {
- "phpstan/phpstan-shim": "*"
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^11",
+ "ext-pdo": "*",
+ "ext-phar": "*",
+ "phpbench/phpbench": "^0.16 || ^1",
+ "phpstan/phpstan": "^1.4",
+ "phpstan/phpstan-phpunit": "^1",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "vimeo/psalm": "^4.30 || ^5.4"
},
- "bin": [
- "phpstan",
- "phpstan.phar"
- ],
"type": "library",
"autoload": {
- "files": [
- "bootstrap.php"
- ]
- },
+ "psr-4": {
+ "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+ }
+ },
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "PHPStan - PHP Static Analysis Tool",
+ "authors": [
+ {
+ "name": "Marco Pivetta",
+ "email": "ocramius@gmail.com",
+ "homepage": "https://ocramius.github.io/"
+ }
+ ],
+ "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+ "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
"keywords": [
- "dev",
- "static analysis"
+ "constructor",
+ "instantiate"
],
"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"
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.5.0"
},
"funding": [
{
- "url": "https://github.com/ondrejmirtes",
- "type": "github"
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
},
{
- "url": "https://github.com/phpstan",
- "type": "github"
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
}
],
- "time": "2025-04-16T13:19:18+00:00"
+ "time": "2022-12-30T00:15:36+00:00"
},
{
- "name": "phpstan/phpstan-strict-rules",
- "version": "2.0.4",
+ "name": "eftec/bladeone",
+ "version": "3.52",
"source": {
"type": "git",
- "url": "https://github.com/phpstan/phpstan-strict-rules.git",
- "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a"
+ "url": "https://github.com/EFTEC/BladeOne.git",
+ "reference": "a19bf66917de0b29836983db87a455a4f6e32148"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
- "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
+ "url": "https://api.github.com/repos/EFTEC/BladeOne/zipball/a19bf66917de0b29836983db87a455a4f6e32148",
+ "reference": "a19bf66917de0b29836983db87a455a4f6e32148",
"shasum": ""
},
"require": {
- "php": "^7.4 || ^8.0",
- "phpstan/phpstan": "^2.0.4"
+ "ext-json": "*",
+ "php": ">=5.6"
},
"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"
+ "friendsofphp/php-cs-fixer": "^2.16.1",
+ "phpunit/phpunit": "^5.7",
+ "squizlabs/php_codesniffer": "^3.5.4"
},
- "type": "phpstan-extension",
- "extra": {
- "phpstan": {
- "includes": [
- "rules.neon"
- ]
- }
+ "suggest": {
+ "eftec/bladeonehtml": "Extension to create forms",
+ "ext-mbstring": "This extension is used if it's active"
},
+ "type": "library",
"autoload": {
"psr-4": {
- "PHPStan\\": "src/"
+ "eftec\\bladeone\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "Extra strict and opinionated rules for PHPStan",
+ "authors": [
+ {
+ "name": "Jorge Patricio Castro Castillo",
+ "email": "jcastro@eftec.cl"
+ }
+ ],
+ "description": "The standalone version Blade Template Engine from Laravel in a single php file",
+ "homepage": "https://github.com/EFTEC/BladeOne",
+ "keywords": [
+ "blade",
+ "php",
+ "template",
+ "templating",
+ "view"
+ ],
"support": {
- "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
- "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.4"
+ "issues": "https://github.com/EFTEC/BladeOne/issues",
+ "source": "https://github.com/EFTEC/BladeOne/tree/3.52"
},
- "time": "2025-03-18T11:42:40+00:00"
+ "time": "2021-04-17T13:49:01+00:00"
},
{
- "name": "psr/container",
- "version": "1.1.2",
+ "name": "felixfbecker/advanced-json-rpc",
+ "version": "v3.2.1",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
- "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447",
+ "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447",
"shasum": ""
},
"require": {
- "php": ">=7.4.0"
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
+ "php": "^7.1 || ^8.0",
+ "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.0 || ^8.0"
},
"type": "library",
"autoload": {
"psr-4": {
- "Psr\\Container\\": "src/"
+ "AdvancedJsonRpc\\": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "ISC"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
}
],
- "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": "A more advanced JSONRPC implementation",
"support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/1.1.2"
+ "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
+ "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1"
},
- "time": "2021-11-05T16:50:12+00:00"
+ "time": "2021-06-11T22:34:44+00:00"
},
{
- "name": "psr/log",
- "version": "1.1.4",
+ "name": "felixfbecker/language-server-protocol",
+ "version": "v1.5.3",
"source": {
"type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
+ "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
- "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9",
+ "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9",
"shasum": ""
},
"require": {
- "php": ">=5.3.0"
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "*",
+ "squizlabs/php_codesniffer": "^3.1",
+ "vimeo/psalm": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1.x-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
- "Psr\\Log\\": "Psr/Log/"
+ "LanguageServerProtocol\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "MIT"
+ "ISC"
],
"authors": [
{
- "name": "PHP-FIG",
- "homepage": "https://www.php-fig.org/"
+ "name": "Felix Becker",
+ "email": "felix.b@outlook.com"
}
],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
+ "description": "PHP classes for the Language Server Protocol",
"keywords": [
- "log",
- "psr",
- "psr-3"
+ "language",
+ "microsoft",
+ "php",
+ "server"
],
"support": {
- "source": "https://github.com/php-fig/log/tree/1.1.4"
+ "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
+ "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3"
},
- "time": "2021-05-03T11:20:27+00:00"
+ "time": "2024-04-30T00:40:11+00:00"
},
{
- "name": "sebastian/diff",
- "version": "4.0.6",
+ "name": "fidry/cpu-core-counter",
+ "version": "1.2.0",
"source": {
"type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+ "url": "https://github.com/theofidry/cpu-core-counter.git",
+ "reference": "8520451a140d3f46ac33042715115e290cf5785f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
- "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f",
+ "reference": "8520451a140d3f46ac33042715115e290cf5785f",
"shasum": ""
},
"require": {
- "php": ">=7.3"
+ "php": "^7.2 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^9.3",
- "symfony/process": "^4.2 || ^5"
+ "fidry/makefile": "^0.2.0",
+ "fidry/php-cs-fixer-config": "^1.1.2",
+ "phpstan/extension-installer": "^1.2.0",
+ "phpstan/phpstan": "^1.9.2",
+ "phpstan/phpstan-deprecation-rules": "^1.0.0",
+ "phpstan/phpstan-phpunit": "^1.2.2",
+ "phpstan/phpstan-strict-rules": "^1.4.4",
+ "phpunit/phpunit": "^8.5.31 || ^9.5.26",
+ "webmozarts/strict-phpunit": "^7.5"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.0-dev"
- }
- },
"autoload": {
- "classmap": [
- "src/"
- ]
+ "psr-4": {
+ "Fidry\\CpuCoreCounter\\": "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": "Théo FIDRY",
+ "email": "theo.fidry@gmail.com"
}
],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
+ "description": "Tiny utility to get the number of CPU cores.",
"keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
+ "CPU",
+ "core"
],
"support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+ "issues": "https://github.com/theofidry/cpu-core-counter/issues",
+ "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0"
},
"funding": [
{
- "url": "https://github.com/sebastianbergmann",
+ "url": "https://github.com/theofidry",
"type": "github"
}
],
- "time": "2024-03-02T06:30:58+00:00"
+ "time": "2024-08-06T10:04:20+00:00"
},
{
- "name": "sirbrillig/phpcs-variable-analysis",
- "version": "v2.12.0",
+ "name": "gettext/gettext",
+ "version": "v4.8.12",
"source": {
"type": "git",
- "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git",
- "reference": "4debf5383d9ade705e0a25121f16c3fecaf433a7"
+ "url": "https://github.com/php-gettext/Gettext.git",
+ "reference": "11af89ee6c087db3cf09ce2111a150bca5c46e12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/4debf5383d9ade705e0a25121f16c3fecaf433a7",
- "reference": "4debf5383d9ade705e0a25121f16c3fecaf433a7",
+ "url": "https://api.github.com/repos/php-gettext/Gettext/zipball/11af89ee6c087db3cf09ce2111a150bca5c46e12",
+ "reference": "11af89ee6c087db3cf09ce2111a150bca5c46e12",
"shasum": ""
},
"require": {
- "php": ">=5.4.0",
- "squizlabs/php_codesniffer": "^3.5.6"
+ "gettext/languages": "^2.3",
+ "php": ">=5.4.0"
},
"require-dev": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0",
- "phpcsstandards/phpcsdevcs": "^1.1",
- "phpstan/phpstan": "^1.7",
- "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0 || ^10.5.32 || ^11.3.3",
- "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0"
+ "illuminate/view": "^5.0.x-dev",
+ "phpunit/phpunit": "^4.8|^5.7|^6.5",
+ "squizlabs/php_codesniffer": "^3.0",
+ "symfony/yaml": "~2",
+ "twig/extensions": "*",
+ "twig/twig": "^1.31|^2.0"
},
- "type": "phpcodesniffer-standard",
+ "suggest": {
+ "illuminate/view": "Is necessary if you want to use the Blade extractor",
+ "symfony/yaml": "Is necessary if you want to use the Yaml extractor/generator",
+ "twig/extensions": "Is necessary if you want to use the Twig extractor",
+ "twig/twig": "Is necessary if you want to use the Twig extractor"
+ },
+ "type": "library",
"autoload": {
"psr-4": {
- "VariableAnalysis\\": "VariableAnalysis/"
+ "Gettext\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-2-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Sam Graham",
- "email": "php-codesniffer-variableanalysis@illusori.co.uk"
- },
- {
- "name": "Payton Swick",
- "email": "payton@foolord.com"
+ "name": "Oscar Otero",
+ "email": "oom@oscarotero.com",
+ "homepage": "http://oscarotero.com",
+ "role": "Developer"
}
],
- "description": "A PHPCS sniff to detect problems with variables.",
+ "description": "PHP gettext manager",
+ "homepage": "https://github.com/oscarotero/Gettext",
"keywords": [
- "phpcs",
- "static analysis"
+ "JS",
+ "gettext",
+ "i18n",
+ "mo",
+ "po",
+ "translation"
],
"support": {
- "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues",
- "source": "https://github.com/sirbrillig/phpcs-variable-analysis",
- "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki"
+ "email": "oom@oscarotero.com",
+ "issues": "https://github.com/oscarotero/Gettext/issues",
+ "source": "https://github.com/php-gettext/Gettext/tree/v4.8.12"
},
- "time": "2025-03-17T16:17:38+00:00"
+ "funding": [
+ {
+ "url": "https://paypal.me/oscarotero",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/oscarotero",
+ "type": "github"
+ },
+ {
+ "url": "https://www.patreon.com/misteroom",
+ "type": "patreon"
+ }
+ ],
+ "time": "2024-05-18T10:25:07+00:00"
},
{
- "name": "slevomat/coding-standard",
- "version": "8.17.0",
+ "name": "gettext/languages",
+ "version": "2.12.1",
"source": {
"type": "git",
- "url": "https://github.com/slevomat/coding-standard.git",
- "reference": "ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0"
+ "url": "https://github.com/php-gettext/Languages.git",
+ "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0",
- "reference": "ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0",
+ "url": "https://api.github.com/repos/php-gettext/Languages/zipball/0b0b0851c55168e1dfb14305735c64019732b5f1",
+ "reference": "0b0b0851c55168e1dfb14305735c64019732b5f1",
"shasum": ""
},
"require": {
- "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
- "php": "^7.4 || ^8.0",
- "phpstan/phpdoc-parser": "^2.1.0",
- "squizlabs/php_codesniffer": "^3.12.1"
+ "php": ">=5.3"
},
"require-dev": {
- "phing/phing": "3.0.1",
- "php-parallel-lint/php-parallel-lint": "1.4.0",
- "phpstan/phpstan": "2.1.11",
- "phpstan/phpstan-deprecation-rules": "2.0.1",
- "phpstan/phpstan-phpunit": "2.0.6",
- "phpstan/phpstan-strict-rules": "2.0.4",
- "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.17|12.1.2"
- },
- "type": "phpcodesniffer-standard",
- "extra": {
- "branch-alias": {
- "dev-master": "8.x-dev"
- }
+ "phpunit/phpunit": "^4.8 || ^5.7 || ^6.5 || ^7.5 || ^8.4"
},
+ "bin": [
+ "bin/export-plural-rules",
+ "bin/import-cldr-data"
+ ],
+ "type": "library",
"autoload": {
"psr-4": {
- "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ "Gettext\\Languages\\": "src/"
}
},
"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": "Michele Locati",
+ "email": "mlocati@gmail.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "gettext languages with plural rules",
+ "homepage": "https://github.com/php-gettext/Languages",
"keywords": [
- "dev",
- "phpcs"
+ "cldr",
+ "i18n",
+ "internationalization",
+ "l10n",
+ "language",
+ "languages",
+ "localization",
+ "php",
+ "plural",
+ "plural rules",
+ "plurals",
+ "translate",
+ "translations",
+ "unicode"
],
"support": {
- "issues": "https://github.com/slevomat/coding-standard/issues",
- "source": "https://github.com/slevomat/coding-standard/tree/8.17.0"
+ "issues": "https://github.com/php-gettext/Languages/issues",
+ "source": "https://github.com/php-gettext/Languages/tree/2.12.1"
},
"funding": [
{
- "url": "https://github.com/kukulich",
- "type": "github"
+ "url": "https://paypal.me/mlocati",
+ "type": "custom"
},
{
- "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
- "type": "tidelift"
+ "url": "https://github.com/mlocati",
+ "type": "github"
}
],
- "time": "2025-04-10T06:06:16+00:00"
+ "time": "2025-03-19T11:14:02+00:00"
},
{
- "name": "spatie/array-to-xml",
- "version": "2.17.1",
+ "name": "guzzlehttp/guzzle",
+ "version": "7.9.3",
"source": {
"type": "git",
- "url": "https://github.com/spatie/array-to-xml.git",
- "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46"
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
- "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
"shasum": ""
},
"require": {
- "ext-dom": "*",
- "php": "^7.4|^8.0"
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+ "guzzlehttp/psr7": "^2.7.0",
+ "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"
},
"require-dev": {
- "mockery/mockery": "^1.2",
- "pestphp/pest": "^1.21",
- "phpunit/phpunit": "^9.0",
- "spatie/pest-plugin-snapshots": "^1.1"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.2",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "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"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
"psr-4": {
- "Spatie\\ArrayToXml\\": "src"
+ "GuzzleHttp\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -2144,175 +2308,199 @@
],
"authors": [
{
- "name": "Freek Van der Herten",
- "email": "freek@spatie.be",
- "homepage": "https://freek.dev",
- "role": "Developer"
+ "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"
}
],
- "description": "Convert an array to xml",
- "homepage": "https://github.com/spatie/array-to-xml",
+ "description": "Guzzle is a PHP HTTP client library",
"keywords": [
- "array",
- "convert",
- "xml"
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
],
"support": {
- "source": "https://github.com/spatie/array-to-xml/tree/2.17.1"
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
},
"funding": [
{
- "url": "https://spatie.be/open-source/support-us",
- "type": "custom"
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
},
{
- "url": "https://github.com/spatie",
+ "url": "https://github.com/Nyholm",
"type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
}
],
- "time": "2022-12-26T08:22:07+00:00"
+ "time": "2025-03-27T13:37:11+00:00"
},
{
- "name": "squizlabs/php_codesniffer",
- "version": "3.12.2",
+ "name": "guzzlehttp/promises",
+ "version": "2.2.0",
"source": {
"type": "git",
- "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
- "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa"
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
- "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
"shasum": ""
},
"require": {
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": ">=5.4.0"
+ "php": "^7.2.5 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
- "bin": [
- "bin/phpcbf",
- "bin/phpcs"
- ],
"type": "library",
"extra": {
- "branch-alias": {
- "dev-master": "3.x-dev"
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
- "BSD-3-Clause"
+ "MIT"
],
"authors": [
{
- "name": "Greg Sherwood",
- "role": "Former lead"
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
},
{
- "name": "Juliette Reinders Folmer",
- "role": "Current lead"
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
},
{
- "name": "Contributors",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
+ "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"
}
],
- "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
- "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "description": "Guzzle promises library",
"keywords": [
- "phpcs",
- "standards",
- "static analysis"
+ "promise"
],
"support": {
- "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues",
- "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
- "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
- "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.2.0"
},
"funding": [
{
- "url": "https://github.com/PHPCSStandards",
+ "url": "https://github.com/GrahamCampbell",
"type": "github"
},
{
- "url": "https://github.com/jrfnl",
+ "url": "https://github.com/Nyholm",
"type": "github"
},
{
- "url": "https://opencollective.com/php_codesniffer",
- "type": "open_collective"
- },
- {
- "url": "https://thanks.dev/u/gh/phpcsstandards",
- "type": "thanks_dev"
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
}
],
- "time": "2025-04-13T04:10:18+00:00"
+ "time": "2025-03-27T13:27:01+00:00"
},
{
- "name": "symfony/console",
- "version": "v5.4.47",
+ "name": "guzzlehttp/psr7",
+ "version": "2.7.1",
"source": {
"type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
- "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
"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"
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
},
"provide": {
- "psr/log-implementation": "1.0|2.0"
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.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"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "0.9.0",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
},
"suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
"psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2320,72 +2508,7627 @@
],
"authors": [
{
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "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"
}
],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
+ "description": "PSR-7 message implementation that also provides common utility methods",
"keywords": [
- "cli",
- "command-line",
- "console",
- "terminal"
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v5.4.47"
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.7.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-03-27T12:30:47+00:00"
+ },
+ {
+ "name": "hamcrest/hamcrest-php",
+ "version": "v2.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hamcrest/hamcrest-php.git",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "replace": {
+ "cordoval/hamcrest-php": "*",
+ "davedevelopment/hamcrest-php": "*",
+ "kodova/hamcrest-php": "*"
+ },
+ "require-dev": {
+ "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": "2.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "hamcrest"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "description": "This is the PHP port of Hamcrest Matchers",
+ "keywords": [
+ "test"
+ ],
+ "support": {
+ "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+ "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1"
+ },
+ "time": "2025-04-30T06:54:44+00:00"
+ },
+ {
+ "name": "humanmade/psalm-plugin-wordpress",
+ "version": "3.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/psalm/psalm-plugin-wordpress.git",
+ "reference": "3f4689ad5264eee7b37121053cec810a3754f7e4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/psalm/psalm-plugin-wordpress/zipball/3f4689ad5264eee7b37121053cec810a3754f7e4",
+ "reference": "3f4689ad5264eee7b37121053cec810a3754f7e4",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "php-stubs/wordpress-globals": "^0.2.0",
+ "php-stubs/wordpress-stubs": "^6.0",
+ "php-stubs/wp-cli-stubs": "^2.7",
+ "vimeo/psalm": "^5 || ^6",
+ "wp-hooks/wordpress-core": "^1.3.0"
+ },
+ "require-dev": {
+ "humanmade/coding-standards": "^1.2",
+ "phpunit/phpunit": "^9.0",
+ "psalm/plugin-phpunit": "^0.18.4"
+ },
+ "type": "psalm-plugin",
+ "extra": {
+ "psalm": {
+ "pluginClass": "PsalmWordPress\\Plugin"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PsalmWordPress\\": [
+ "."
+ ]
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "kkmuffme",
+ "role": "Maintainer"
+ },
+ {
+ "name": "Joe Hoyle",
+ "role": "Creator"
+ }
+ ],
+ "description": "WordPress stubs and plugin for Psalm static analysis.",
+ "support": {
+ "issues": "https://github.com/psalm/psalm-plugin-wordpress/issues",
+ "source": "https://github.com/psalm/psalm-plugin-wordpress"
+ },
+ "time": "2024-04-01T10:36:11+00:00"
+ },
+ {
+ "name": "ifsnop/mysqldump-php",
+ "version": "v2.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ifsnop/mysqldump-php.git",
+ "reference": "2d3a43fc0c49f23bf7dee392b0dd1f8c799f89d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ifsnop/mysqldump-php/zipball/2d3a43fc0c49f23bf7dee392b0dd1f8c799f89d3",
+ "reference": "2d3a43fc0c49f23bf7dee392b0dd1f8c799f89d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.8.36",
+ "squizlabs/php_codesniffer": "1.*"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Ifsnop\\": "src/Ifsnop/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Diego Torres",
+ "homepage": "https://github.com/ifsnop",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP version of mysqldump cli that comes with MySQL",
+ "homepage": "https://github.com/ifsnop/mysqldump-php",
+ "keywords": [
+ "PHP7",
+ "database",
+ "hhvm",
+ "mariadb",
+ "mysql",
+ "mysql-backup",
+ "mysqldump",
+ "pdo",
+ "php",
+ "php5",
+ "sql"
+ ],
+ "support": {
+ "issues": "https://github.com/ifsnop/mysqldump-php/issues",
+ "source": "https://github.com/ifsnop/mysqldump-php/tree/v2.12"
+ },
+ "time": "2023-04-12T07:43:14+00:00"
+ },
+ {
+ "name": "johnpbloch/wordpress-core",
+ "version": "6.8.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/johnpbloch/wordpress-core.git",
+ "reference": "74197a5012b0a72834ffc58bb32ef0045f15a26c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/johnpbloch/wordpress-core/zipball/74197a5012b0a72834ffc58bb32ef0045f15a26c",
+ "reference": "74197a5012b0a72834ffc58bb32ef0045f15a26c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=7.2.24"
+ },
+ "provide": {
+ "wordpress/core-implementation": "6.8.0"
+ },
+ "type": "wordpress-core",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "GPL-2.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "WordPress Community",
+ "homepage": "https://wordpress.org/about/"
+ }
+ ],
+ "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.",
+ "homepage": "https://wordpress.org/",
+ "keywords": [
+ "blog",
+ "cms",
+ "wordpress"
+ ],
+ "support": {
+ "forum": "https://wordpress.org/support/",
+ "irc": "irc://irc.freenode.net/wordpress",
+ "issues": "https://core.trac.wordpress.org/",
+ "source": "https://core.trac.wordpress.org/browser",
+ "wiki": "https://codex.wordpress.org/"
+ },
+ "time": "2025-04-15T15:47:20+00:00"
+ },
+ {
+ "name": "justinrainbow/json-schema",
+ "version": "v5.2.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/jsonrainbow/json-schema.git",
+ "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/jsonrainbow/json-schema/zipball/fbbe7e5d79f618997bc3332a6f49246036c45793",
+ "reference": "fbbe7e5d79f618997bc3332a6f49246036c45793",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.2.20||~2.15.1",
+ "json-schema/json-schema-test-suite": "1.2.0",
+ "phpunit/phpunit": "^4.8.35"
+ },
+ "bin": [
+ "bin/validate-json"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "JsonSchema\\": "src/JsonSchema/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bruno Prieto Reis",
+ "email": "bruno.p.reis@gmail.com"
+ },
+ {
+ "name": "Justin Rainbow",
+ "email": "justin.rainbow@gmail.com"
+ },
+ {
+ "name": "Igor Wiedler",
+ "email": "igor@wiedler.ch"
+ },
+ {
+ "name": "Robert Schönthal",
+ "email": "seroscho@googlemail.com"
+ }
+ ],
+ "description": "A library to validate a json schema.",
+ "homepage": "https://github.com/justinrainbow/json-schema",
+ "keywords": [
+ "json",
+ "schema"
+ ],
+ "support": {
+ "issues": "https://github.com/jsonrainbow/json-schema/issues",
+ "source": "https://github.com/jsonrainbow/json-schema/tree/v5.2.13"
+ },
+ "time": "2023-09-26T02:20:38+00:00"
+ },
+ {
+ "name": "lucatume/wp-browser",
+ "version": "3.7.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/lucatume/wp-browser.git",
+ "reference": "4f4e266bea123abd6a9517fb239ee4ec7735b2c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/lucatume/wp-browser/zipball/4f4e266bea123abd6a9517fb239ee4ec7735b2c7",
+ "reference": "4f4e266bea123abd6a9517fb239ee4ec7735b2c7",
+ "shasum": ""
+ },
+ "require": {
+ "codeception/codeception": "^4",
+ "codeception/module-asserts": "^1.0",
+ "codeception/module-cli": "^1.0",
+ "codeception/module-db": "^1.0",
+ "codeception/module-filesystem": "^1.0",
+ "codeception/module-phpbrowser": "^1.0",
+ "codeception/module-webdriver": "^1.0",
+ "composer-runtime-api": "^2.2",
+ "ext-curl": "*",
+ "ext-fileinfo": "*",
+ "ext-json": "*",
+ "ext-mysqli": "*",
+ "ext-pdo": "*",
+ "ext-zip": "*",
+ "ifsnop/mysqldump-php": "^2.12",
+ "php": ">=7.1 <8.0",
+ "symfony/filesystem": ">=3.4.47 <7.0",
+ "symfony/process": ">=3.4.47 <7.0",
+ "vlucas/phpdotenv": "^4.3"
+ },
+ "require-dev": {
+ "gumlet/php-image-resize": "^1.6",
+ "lucatume/codeception-snapshot-assertions": "^0.4",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan-symfony": "^0.12.44",
+ "squizlabs/php_codesniffer": "^3.7",
+ "szepeviktor/phpstan-wordpress": "^0.7"
+ },
+ "suggest": {
+ "ext-pdo_sqlite": "For SQLite database support.",
+ "ext-sqlite3": "For SQLite database support."
+ },
+ "type": "library",
+ "extra": {
+ "_hash": "484f861f69198089cab0e642f27e5653"
+ },
+ "autoload": {
+ "files": [
+ "src/version-4-aliases.php",
+ "src/Deprecated/deprecated-functions.php",
+ "src/functions.php",
+ "src/shim.php"
+ ],
+ "psr-4": {
+ "Hautelook\\Phpass\\": "includes/Hautelook/Phpass",
+ "lucatume\\WPBrowser\\": [
+ "src/",
+ "src/Deprecated"
+ ],
+ "lucatume\\WPBrowser\\Opis\\Closure\\": "includes/opis/closure/src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "theAverageDev (Luca Tumedei)",
+ "email": "luca@theaveragedev.com",
+ "homepage": "https://theaveragedev.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "A set of Codeception modules to test WordPress projects.",
+ "homepage": "https://github.com/lucatume/wp-browser",
+ "keywords": [
+ "codeception",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/lucatume/wp-browser/issues",
+ "source": "https://github.com/lucatume/wp-browser/tree/3.7.12"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/lucatume",
+ "type": "github"
+ }
+ ],
+ "time": "2025-02-22T12:33:32+00:00"
+ },
+ {
+ "name": "mck89/peast",
+ "version": "v1.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mck89/peast.git",
+ "reference": "3a752d39bd7d8dc1e19bcf424f3d5ac1a1ca6ad5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mck89/peast/zipball/3a752d39bd7d8dc1e19bcf424f3d5ac1a1ca6ad5",
+ "reference": "3a752d39bd7d8dc1e19bcf424f3d5ac1a1ca6ad5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-mbstring": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.17.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Peast\\": "lib/Peast/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Marco Marchiò",
+ "email": "marco.mm89@gmail.com"
+ }
+ ],
+ "description": "Peast is PHP library that generates AST for JavaScript code",
+ "support": {
+ "issues": "https://github.com/mck89/peast/issues",
+ "source": "https://github.com/mck89/peast/tree/v1.17.0"
+ },
+ "time": "2025-03-07T19:44:14+00:00"
+ },
+ {
+ "name": "mockery/mockery",
+ "version": "1.6.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/mockery/mockery.git",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+ "shasum": ""
+ },
+ "require": {
+ "hamcrest/hamcrest-php": "^2.0.1",
+ "lib-pcre": ">=7.0",
+ "php": ">=7.3"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5 || ^9.6.17",
+ "symplify/easy-coding-standard": "^12.1.14"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "library/helpers.php",
+ "library/Mockery.php"
+ ],
+ "psr-4": {
+ "Mockery\\": "library/Mockery"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "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": "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.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/myclabs/DeepCopy.git",
+ "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
+ "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
+ "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.1"
+ },
+ "funding": [
+ {
+ "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-04-29T12:36:36+00:00"
+ },
+ {
+ "name": "nb/oxymel",
+ "version": "v0.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nb/oxymel.git",
+ "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nb/oxymel/zipball/cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
+ "reference": "cbe626ef55d5c4cc9b5e6e3904b395861ea76e3c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.2.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Oxymel": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nikolay Bachiyski",
+ "email": "nb@nikolay.bg",
+ "homepage": "http://extrapolate.me/"
+ }
+ ],
+ "description": "A sweet XML builder",
+ "homepage": "https://github.com/nb/oxymel",
+ "keywords": [
+ "xml"
+ ],
+ "support": {
+ "issues": "https://github.com/nb/oxymel/issues",
+ "source": "https://github.com/nb/oxymel/tree/master"
+ },
+ "time": "2013-02-24T15:01:54+00:00"
+ },
+ {
+ "name": "netresearch/jsonmapper",
+ "version": "v4.5.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/cweiske/jsonmapper.git",
+ "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
+ "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-pcre": "*",
+ "ext-reflection": "*",
+ "ext-spl": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0",
+ "squizlabs/php_codesniffer": "~3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "JsonMapper": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "OSL-3.0"
+ ],
+ "authors": [
+ {
+ "name": "Christian Weiske",
+ "email": "cweiske@cweiske.de",
+ "homepage": "http://github.com/cweiske/jsonmapper/",
+ "role": "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.5.0"
+ },
+ "time": "2024-09-08T10:13:13+00:00"
+ },
+ {
+ "name": "nikic/php-parser",
+ "version": "v4.19.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+ "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-tokenizer": "*",
+ "php": ">=7.1"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4"
+ },
+ "time": "2024-09-29T15:01:53+00:00"
+ },
+ {
+ "name": "phar-io/manifest",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/manifest.git",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+ "reference": "54750ef60c58e43759730615a392c31c80e23176",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-phar": "*",
+ "ext-xmlwriter": "*",
+ "phar-io/version": "^3.0.1",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+ "support": {
+ "issues": "https://github.com/phar-io/manifest/issues",
+ "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:33:53+00:00"
+ },
+ {
+ "name": "phar-io/version",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phar-io/version.git",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Heuer",
+ "email": "sebastian@phpeople.de",
+ "role": "Developer"
+ },
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "Library for handling version information and constraints",
+ "support": {
+ "issues": "https://github.com/phar-io/version/issues",
+ "source": "https://github.com/phar-io/version/tree/3.2.1"
+ },
+ "time": "2022-02-21T01:04:05+00:00"
+ },
+ {
+ "name": "php-extended/polyfill-php80-str-utils",
+ "version": "1.3.7",
+ "source": {
+ "type": "git",
+ "url": "https://gitlab.com/php-extended/polyfill-php80-str-utils.git",
+ "reference": "0749426252e3e27c526fda939e8d3ff050bf907b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://gitlab.com/api/v4/projects/php-extended%2Fpolyfill-php80-str-utils/repository/archive.zip?sha=0749426252e3e27c526fda939e8d3ff050bf907b",
+ "reference": "0749426252e3e27c526fda939e8d3ff050bf907b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "php-extended/placeholder-phpunit": "^9"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "PhpExtended\\Polyfill\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Anastaszor",
+ "homepage": "https://gitlab.com/Anastaszor",
+ "role": "developer"
+ }
+ ],
+ "description": "A php implementation of string functions introduced in php8 and above",
+ "homepage": "https://gitlab.com/php-extended/polyfill-str-utils",
+ "keywords": [
+ "implementation",
+ "php",
+ "polyfill",
+ "str",
+ "string_ends_with",
+ "string_starts_with",
+ "utils"
+ ],
+ "support": {
+ "issues": "https://gitlab.com/php-extended/polyfill-str-utils/issues",
+ "source": "https://gitlab.com/php-extended/polyfill-str-utils"
+ },
+ "abandoned": "php >= 8.0",
+ "time": "2024-03-31T13:28:10+00:00"
+ },
+ {
+ "name": "php-stubs/wordpress-globals",
+ "version": "v0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-stubs/wordpress-globals.git",
+ "reference": "748a1fb2ae8fda94844bd0545935095dbf404b32"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-stubs/wordpress-globals/zipball/748a1fb2ae8fda94844bd0545935095dbf404b32",
+ "reference": "748a1fb2ae8fda94844bd0545935095dbf404b32",
+ "shasum": ""
+ },
+ "require-dev": {
+ "php": "~7.1"
+ },
+ "suggest": {
+ "php-stubs/wordpress-stubs": "Up-to-date WordPress function and class declaration stubs",
+ "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "Global variables and global constants from WordPress core.",
+ "homepage": "https://github.com/php-stubs/wordpress-globals",
+ "keywords": [
+ "PHPStan",
+ "constants",
+ "globals",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/php-stubs/wordpress-globals/issues",
+ "source": "https://github.com/php-stubs/wordpress-globals/tree/master"
+ },
+ "time": "2020-01-13T06:12:59+00:00"
+ },
+ {
+ "name": "php-stubs/wordpress-stubs",
+ "version": "v6.8.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-stubs/wordpress-stubs.git",
+ "reference": "92e444847d94f7c30f88c60004648f507688acd5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/92e444847d94f7c30f88c60004648f507688acd5",
+ "reference": "92e444847d94f7c30f88c60004648f507688acd5",
+ "shasum": ""
+ },
+ "conflict": {
+ "phpdocumentor/reflection-docblock": "5.6.1"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "nikic/php-parser": "^5.4",
+ "php": "^7.4 || ^8.0",
+ "php-stubs/generator": "^0.8.3",
+ "phpdocumentor/reflection-docblock": "^5.4.1",
+ "phpstan/phpstan": "^2.1",
+ "phpunit/phpunit": "^9.5",
+ "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.1.1",
+ "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
+ },
+ "suggest": {
+ "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
+ "symfony/polyfill-php80": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WordPress function and class declaration stubs for static analysis.",
+ "homepage": "https://github.com/php-stubs/wordpress-stubs",
+ "keywords": [
+ "PHPStan",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
+ "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.8.1"
+ },
+ "time": "2025-05-02T12:33:34+00:00"
+ },
+ {
+ "name": "php-stubs/wp-cli-stubs",
+ "version": "v2.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-stubs/wp-cli-stubs.git",
+ "reference": "f27ff9e8e29d7962cb070e58de70dfaf63183007"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-stubs/wp-cli-stubs/zipball/f27ff9e8e29d7962cb070e58de70dfaf63183007",
+ "reference": "f27ff9e8e29d7962cb070e58de70dfaf63183007",
+ "shasum": ""
+ },
+ "require": {
+ "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0"
+ },
+ "require-dev": {
+ "php": "~7.3 || ~8.0",
+ "php-stubs/generator": "^0.8.0"
+ },
+ "suggest": {
+ "symfony/polyfill-php73": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WP-CLI function and class declaration stubs for static analysis.",
+ "homepage": "https://github.com/php-stubs/wp-cli-stubs",
+ "keywords": [
+ "PHPStan",
+ "static analysis",
+ "wordpress",
+ "wp-cli"
+ ],
+ "support": {
+ "issues": "https://github.com/php-stubs/wp-cli-stubs/issues",
+ "source": "https://github.com/php-stubs/wp-cli-stubs/tree/v2.11.0"
+ },
+ "time": "2024-11-25T10:09:13+00:00"
+ },
+ {
+ "name": "php-webdriver/webdriver",
+ "version": "1.15.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-webdriver/php-webdriver.git",
+ "reference": "998e499b786805568deaf8cbf06f4044f05d91bf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-webdriver/php-webdriver/zipball/998e499b786805568deaf8cbf06f4044f05d91bf",
+ "reference": "998e499b786805568deaf8cbf06f4044f05d91bf",
+ "shasum": ""
+ },
+ "require": {
+ "ext-curl": "*",
+ "ext-json": "*",
+ "ext-zip": "*",
+ "php": "^7.3 || ^8.0",
+ "symfony/polyfill-mbstring": "^1.12",
+ "symfony/process": "^5.0 || ^6.0 || ^7.0"
+ },
+ "replace": {
+ "facebook/webdriver": "*"
+ },
+ "require-dev": {
+ "ergebnis/composer-normalize": "^2.20.0",
+ "ondram/ci-detector": "^4.0",
+ "php-coveralls/php-coveralls": "^2.4",
+ "php-mock/php-mock-phpunit": "^2.0",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpunit/phpunit": "^9.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "symfony/var-dumper": "^5.0 || ^6.0 || ^7.0"
+ },
+ "suggest": {
+ "ext-SimpleXML": "For Firefox profile creation"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "lib/Exception/TimeoutException.php"
+ ],
+ "psr-4": {
+ "Facebook\\WebDriver\\": "lib/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A PHP client for Selenium WebDriver. Previously facebook/webdriver.",
+ "homepage": "https://github.com/php-webdriver/php-webdriver",
+ "keywords": [
+ "Chromedriver",
+ "geckodriver",
+ "php",
+ "selenium",
+ "webdriver"
+ ],
+ "support": {
+ "issues": "https://github.com/php-webdriver/php-webdriver/issues",
+ "source": "https://github.com/php-webdriver/php-webdriver/tree/1.15.2"
+ },
+ "time": "2024-11-21T15:12:59+00:00"
+ },
+ {
+ "name": "phpcompatibility/php-compatibility",
+ "version": "dev-develop",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
+ "reference": "9013cd039fe5740953f9fdeebd19d901b80e26f2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9013cd039fe5740953f9fdeebd19d901b80e26f2",
+ "reference": "9013cd039fe5740953f9fdeebd19d901b80e26f2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "phpcsstandards/phpcsutils": "^1.0.12",
+ "squizlabs/php_codesniffer": "^3.10.0"
+ },
+ "replace": {
+ "wimg/php-compatibility": "*"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-console-highlighter": "^1.0.0",
+ "php-parallel-lint/php-parallel-lint": "^1.4.0",
+ "phpcsstandards/phpcsdevcs": "^1.1.3",
+ "phpcsstandards/phpcsdevtools": "^1.2.0",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4 || ^10.1.0",
+ "yoast/phpunit-polyfills": "^1.0.5 || ^2.0.0"
+ },
+ "suggest": {
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "default-branch": true,
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.x-dev",
+ "dev-develop": "10.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "homepage": "https://github.com/wimg",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+ }
+ ],
+ "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
+ "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+ "keywords": [
+ "compatibility",
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
+ "security": "https://github.com/PHPCompatibility/PHPCompatibility/security/policy",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCompatibility",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcompatibility",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-01-20T20:06:48+00:00"
+ },
+ {
+ "name": "phpcompatibility/phpcompatibility-paragonie",
+ "version": "1.3.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
+ "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+ "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+ "shasum": ""
+ },
+ "require": {
+ "phpcompatibility/php-compatibility": "^9.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "paragonie/random_compat": "dev-master",
+ "paragonie/sodium_compat": "dev-master"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "lead"
+ }
+ ],
+ "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
+ "homepage": "http://phpcompatibility.com/",
+ "keywords": [
+ "compatibility",
+ "paragonie",
+ "phpcs",
+ "polyfill",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
+ "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCompatibility",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-04-24T21:30:46+00:00"
+ },
+ {
+ "name": "phpcompatibility/phpcompatibility-wp",
+ "version": "2.1.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
+ "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/80ccb1a7640995edf1b87a4409fa584cd5869469",
+ "reference": "80ccb1a7640995edf1b87a4409fa584cd5869469",
+ "shasum": ""
+ },
+ "require": {
+ "phpcompatibility/php-compatibility": "^9.0",
+ "phpcompatibility/phpcompatibility-paragonie": "^1.0"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0"
+ },
+ "suggest": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+ "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+ },
+ "type": "phpcodesniffer-standard",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Wim Godden",
+ "role": "lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "lead"
+ }
+ ],
+ "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
+ "homepage": "http://phpcompatibility.com/",
+ "keywords": [
+ "compatibility",
+ "phpcs",
+ "standards",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
+ "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy",
+ "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCompatibility",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2025-01-16T22:34:19+00:00"
+ },
+ {
+ "name": "phpcsstandards/phpcsextra",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
+ "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+ "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "phpcsstandards/phpcsutils": "^1.0.9",
+ "squizlabs/php_codesniffer": "^3.8.0"
+ },
+ "require-dev": {
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3.2",
+ "phpcsstandards/phpcsdevcs": "^1.1.6",
+ "phpcsstandards/phpcsdevtools": "^1.2.1",
+ "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-stable": "1.x-dev",
+ "dev-develop": "1.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
+ }
+ ],
+ "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
+ "keywords": [
+ "PHP_CodeSniffer",
+ "phpcbf",
+ "phpcodesniffer-standard",
+ "phpcs",
+ "standards",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
+ "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHPCSExtra"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2023-12-08T16:49:07+00:00"
+ },
+ {
+ "name": "phpcsstandards/phpcsutils",
+ "version": "1.0.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
+ "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c",
+ "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
+ "php": ">=5.4",
+ "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev"
+ },
+ "require-dev": {
+ "ext-filter": "*",
+ "php-parallel-lint/php-console-highlighter": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.3.2",
+ "phpcsstandards/phpcsdevcs": "^1.1.6",
+ "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-stable": "1.x-dev",
+ "dev-develop": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "PHPCSUtils/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "LGPL-3.0-or-later"
+ ],
+ "authors": [
+ {
+ "name": "Juliette Reinders Folmer",
+ "homepage": "https://github.com/jrfnl",
+ "role": "lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
+ }
+ ],
+ "description": "A suite of utility functions for use with PHP_CodeSniffer",
+ "homepage": "https://phpcsutils.com/",
+ "keywords": [
+ "PHP_CodeSniffer",
+ "phpcbf",
+ "phpcodesniffer-standard",
+ "phpcs",
+ "phpcs3",
+ "standards",
+ "static analysis",
+ "tokens",
+ "utility"
+ ],
+ "support": {
+ "docs": "https://phpcsutils.com/",
+ "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
+ "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHPCSUtils"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-05-20T13:34:27+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-common",
+ "version": "2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-2.x": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
+ "homepage": "http://www.phpdoc.org",
+ "keywords": [
+ "FQSEN",
+ "phpDocumentor",
+ "phpdoc",
+ "reflection",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
+ },
+ "time": "2020-06-27T09:03:43+00:00"
+ },
+ {
+ "name": "phpdocumentor/reflection-docblock",
+ "version": "5.6.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
+ "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.1",
+ "ext-filter": "*",
+ "php": "^7.4 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.2",
+ "phpdocumentor/type-resolver": "^1.7",
+ "phpstan/phpdoc-parser": "^1.7|^2.0",
+ "webmozart/assert": "^1.9.1"
+ },
+ "require-dev": {
+ "mockery/mockery": "~1.3.5 || ~1.6.0",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-mockery": "^1.1",
+ "phpstan/phpstan-webmozart-assert": "^1.2",
+ "phpunit/phpunit": "^9.5",
+ "psalm/phar": "^5.26"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "opensource@ijaap.nl"
+ }
+ ],
+ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2"
+ },
+ "time": "2025-04-13T19:20:35+00:00"
+ },
+ {
+ "name": "phpdocumentor/type-resolver",
+ "version": "1.10.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpDocumentor/TypeResolver.git",
+ "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.3 || ^8.0",
+ "phpdocumentor/reflection-common": "^2.0",
+ "phpstan/phpdoc-parser": "^1.18|^2.0"
+ },
+ "require-dev": {
+ "ext-tokenizer": "*",
+ "phpbench/phpbench": "^1.2",
+ "phpstan/extension-installer": "^1.1",
+ "phpstan/phpstan": "^1.8",
+ "phpstan/phpstan-phpunit": "^1.1",
+ "phpunit/phpunit": "^9.5",
+ "rector/rector": "^0.13.9",
+ "vimeo/psalm": "^4.25"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "phpDocumentor\\Reflection\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Mike van Riel",
+ "email": "me@mikevanriel.com"
+ }
+ ],
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "support": {
+ "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0"
+ },
+ "time": "2024-11-09T15:12:26+00:00"
+ },
+ {
+ "name": "phpoption/phpoption",
+ "version": "1.9.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/schmittjoh/php-option.git",
+ "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ },
+ "branch-alias": {
+ "dev-master": "1.9-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpOption\\": "src/PhpOption/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "Apache-2.0"
+ ],
+ "authors": [
+ {
+ "name": "Johannes M. Schmitt",
+ "email": "schmittjoh@gmail.com",
+ "homepage": "https://github.com/schmittjoh"
+ },
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ }
+ ],
+ "description": "Option Type for PHP",
+ "keywords": [
+ "language",
+ "option",
+ "php",
+ "type"
+ ],
+ "support": {
+ "issues": "https://github.com/schmittjoh/php-option/issues",
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-20T21:41:07+00:00"
+ },
+ {
+ "name": "phpstan/phpdoc-parser",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpdoc-parser.git",
+ "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68",
+ "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.1.0"
+ },
+ "time": "2025-02-19T13:28:12+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "2.1.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/96dde49e967c0c22812bcfa7bda4ff82c09f3b0c",
+ "reference": "96dde49e967c0c22812bcfa7bda4ff82c09f3b0c",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2025-04-16T13:19:18+00:00"
+ },
+ {
+ "name": "phpstan/phpstan-strict-rules",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan-strict-rules.git",
+ "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
+ "reference": "3e139cbe67fafa3588e1dbe27ca50f31fdb6236a",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpstan": "^2.0.4"
+ },
+ "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",
+ "support": {
+ "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
+ "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.4"
+ },
+ "time": "2025-03-18T11:42:40+00:00"
+ },
+ {
+ "name": "phpunit/php-code-coverage",
+ "version": "9.2.32",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+ "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
+ "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
+ "ext-xmlwriter": "*",
+ "nikic/php-parser": "^4.19.1 || ^5.1.0",
+ "php": ">=7.3",
+ "phpunit/php-file-iterator": "^3.0.6",
+ "phpunit/php-text-template": "^2.0.4",
+ "sebastian/code-unit-reverse-lookup": "^2.0.3",
+ "sebastian/complexity": "^2.0.3",
+ "sebastian/environment": "^5.1.5",
+ "sebastian/lines-of-code": "^1.0.4",
+ "sebastian/version": "^3.0.2",
+ "theseer/tokenizer": "^1.2.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6"
+ },
+ "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": "9.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/9.2.32"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-08-22T04:23:01+00:00"
+ },
+ {
+ "name": "phpunit/php-file-iterator",
+ "version": "3.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "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"
+ }
+ ],
+ "time": "2021-12-02T12:48:52+00:00"
+ },
+ {
+ "name": "phpunit/php-invoker",
+ "version": "3.1.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-invoker.git",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "ext-pcntl": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-pcntl": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Invoke callables with a timeout",
+ "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+ "keywords": [
+ "process"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+ "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:58:55+00:00"
+ },
+ {
+ "name": "phpunit/php-text-template",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-text-template.git",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Simple template engine.",
+ "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+ "keywords": [
+ "template"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T05:33:50+00:00"
+ },
+ {
+ "name": "phpunit/php-timer",
+ "version": "5.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/php-timer.git",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Utility class for timing",
+ "homepage": "https://github.com/sebastianbergmann/php-timer/",
+ "keywords": [
+ "timer"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:16:10+00:00"
+ },
+ {
+ "name": "phpunit/phpunit",
+ "version": "9.6.23",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/phpunit.git",
+ "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
+ "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/instantiator": "^1.5.0 || ^2",
+ "ext-dom": "*",
+ "ext-json": "*",
+ "ext-libxml": "*",
+ "ext-mbstring": "*",
+ "ext-xml": "*",
+ "ext-xmlwriter": "*",
+ "myclabs/deep-copy": "^1.13.1",
+ "phar-io/manifest": "^2.0.4",
+ "phar-io/version": "^3.2.1",
+ "php": ">=7.3",
+ "phpunit/php-code-coverage": "^9.2.32",
+ "phpunit/php-file-iterator": "^3.0.6",
+ "phpunit/php-invoker": "^3.1.1",
+ "phpunit/php-text-template": "^2.0.4",
+ "phpunit/php-timer": "^5.0.3",
+ "sebastian/cli-parser": "^1.0.2",
+ "sebastian/code-unit": "^1.0.8",
+ "sebastian/comparator": "^4.0.8",
+ "sebastian/diff": "^4.0.6",
+ "sebastian/environment": "^5.1.5",
+ "sebastian/exporter": "^4.0.6",
+ "sebastian/global-state": "^5.0.7",
+ "sebastian/object-enumerator": "^4.0.4",
+ "sebastian/resource-operations": "^3.0.4",
+ "sebastian/type": "^3.2.1",
+ "sebastian/version": "^3.0.2"
+ },
+ "suggest": {
+ "ext-soap": "To be able to generate mocks based on WSDL files",
+ "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+ },
+ "bin": [
+ "phpunit"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "9.6-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Framework/Assert/Functions.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "The PHP Unit Testing framework.",
+ "homepage": "https://phpunit.de/",
+ "keywords": [
+ "phpunit",
+ "testing",
+ "xunit"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.23"
+ },
+ "funding": [
+ {
+ "url": "https://phpunit.de/sponsors.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-05-02T06:40:34+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/event-dispatcher",
+ "version": "1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/event-dispatcher.git",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\EventDispatcher\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Standard interfaces for event handling.",
+ "keywords": [
+ "events",
+ "psr",
+ "psr-14"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/event-dispatcher/issues",
+ "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0"
+ },
+ "time": "2019-01-08T18:20:26+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "1.1.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
+ "reference": "d49695b909c3b7628b6289db5479a1c204601f11",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "Psr/Log/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
+ "time": "2021-05-03T11:20:27+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "react/promise",
+ "version": "v3.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/reactphp/promise.git",
+ "reference": "8a164643313c71354582dc850b42b33fa12a4b63"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63",
+ "reference": "8a164643313c71354582dc850b42b33fa12a4b63",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "1.10.39 || 1.4.10",
+ "phpunit/phpunit": "^9.6 || ^7.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "React\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Sorgalla",
+ "email": "jsorgalla@gmail.com",
+ "homepage": "https://sorgalla.com/"
+ },
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering",
+ "homepage": "https://clue.engineering/"
+ },
+ {
+ "name": "Cees-Jan Kiewiet",
+ "email": "reactphp@ceesjankiewiet.nl",
+ "homepage": "https://wyrihaximus.net/"
+ },
+ {
+ "name": "Chris Boden",
+ "email": "cboden@gmail.com",
+ "homepage": "https://cboden.dev/"
+ }
+ ],
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP",
+ "keywords": [
+ "promise",
+ "promises"
+ ],
+ "support": {
+ "issues": "https://github.com/reactphp/promise/issues",
+ "source": "https://github.com/reactphp/promise/tree/v3.2.0"
+ },
+ "funding": [
+ {
+ "url": "https://opencollective.com/reactphp",
+ "type": "open_collective"
+ }
+ ],
+ "time": "2024-05-24T10:39:05+00:00"
+ },
+ {
+ "name": "sebastian/cli-parser",
+ "version": "1.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/cli-parser.git",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for parsing CLI options",
+ "homepage": "https://github.com/sebastianbergmann/cli-parser",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+ "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:27:43+00:00"
+ },
+ {
+ "name": "sebastian/code-unit",
+ "version": "1.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit.git",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/code-unit",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:08:54+00:00"
+ },
+ {
+ "name": "sebastian/code-unit-reverse-lookup",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Looks up which function or method a line of code belongs to",
+ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+ "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T05:30:19+00:00"
+ },
+ {
+ "name": "sebastian/comparator",
+ "version": "4.0.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/comparator.git",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+ "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/diff": "^4.0",
+ "sebastian/exporter": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "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": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@2bepublished.at"
+ }
+ ],
+ "description": "Provides the functionality to compare PHP values for equality",
+ "homepage": "https://github.com/sebastianbergmann/comparator",
+ "keywords": [
+ "comparator",
+ "compare",
+ "equality"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-14T12:41:17+00:00"
+ },
+ {
+ "name": "sebastian/complexity",
+ "version": "2.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/complexity.git",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for calculating the complexity of PHP code units",
+ "homepage": "https://github.com/sebastianbergmann/complexity",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/complexity/issues",
+ "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:19:30+00:00"
+ },
+ {
+ "name": "sebastian/diff",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/diff.git",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3",
+ "symfony/process": "^4.2 || ^5"
+ },
+ "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": "Kore Nordmann",
+ "email": "mail@kore-nordmann.de"
+ }
+ ],
+ "description": "Diff implementation",
+ "homepage": "https://github.com/sebastianbergmann/diff",
+ "keywords": [
+ "diff",
+ "udiff",
+ "unidiff",
+ "unified diff"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:30:58+00:00"
+ },
+ {
+ "name": "sebastian/environment",
+ "version": "5.1.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/environment.git",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-posix": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.1-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides functionality to handle HHVM/PHP environments",
+ "homepage": "http://www.github.com/sebastianbergmann/environment",
+ "keywords": [
+ "Xdebug",
+ "environment",
+ "hhvm"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:03:51+00:00"
+ },
+ {
+ "name": "sebastian/exporter",
+ "version": "4.0.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/exporter.git",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-mbstring": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "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": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Volker Dusch",
+ "email": "github@wallbash.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ },
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Provides the functionality to export PHP variables for visualization",
+ "homepage": "https://www.github.com/sebastianbergmann/exporter",
+ "keywords": [
+ "export",
+ "exporter"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:33:00+00:00"
+ },
+ {
+ "name": "sebastian/global-state",
+ "version": "5.0.7",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/global-state.git",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "ext-dom": "*",
+ "phpunit/phpunit": "^9.3"
+ },
+ "suggest": {
+ "ext-uopz": "*"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Snapshotting of global state",
+ "homepage": "http://www.github.com/sebastianbergmann/global-state",
+ "keywords": [
+ "global state"
+ ],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-02T06:35:11+00:00"
+ },
+ {
+ "name": "sebastian/lines-of-code",
+ "version": "1.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+ "shasum": ""
+ },
+ "require": {
+ "nikic/php-parser": "^4.18 || ^5.0",
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library for counting the lines of code in PHP source code",
+ "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+ "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-22T06:20:34+00:00"
+ },
+ {
+ "name": "sebastian/object-enumerator",
+ "version": "4.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+ "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3",
+ "sebastian/object-reflector": "^2.0",
+ "sebastian/recursion-context": "^4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "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"
+ }
+ ],
+ "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+ "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+ "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:12:34+00:00"
+ },
+ {
+ "name": "sebastian/object-reflector",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/object-reflector.git",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "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"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-10-26T13:14:26+00:00"
+ },
+ {
+ "name": "sebastian/recursion-context",
+ "version": "4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/recursion-context.git",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.3"
+ },
+ "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": "Jeff Welch",
+ "email": "whatthejeff@gmail.com"
+ },
+ {
+ "name": "Adam Harvey",
+ "email": "aharvey@php.net"
+ }
+ ],
+ "description": "Provides functionality to recursively process PHP variables",
+ "homepage": "https://github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:07:39+00:00"
+ },
+ {
+ "name": "sebastian/resource-operations",
+ "version": "3.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/resource-operations.git",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de"
+ }
+ ],
+ "description": "Provides a list of PHP built-in functions that operate on resources",
+ "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
+ "support": {
+ "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-14T16:00:52+00:00"
+ },
+ {
+ "name": "sebastian/type",
+ "version": "3.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/type.git",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.2-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Collection of value objects that represent the types of the PHP type system",
+ "homepage": "https://github.com/sebastianbergmann/type",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/type/issues",
+ "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2023-02-03T06:13:03+00:00"
+ },
+ {
+ "name": "sebastian/version",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sebastianbergmann/version.git",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+ "reference": "c6c1022351a901512170118436c764e473f6de8c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sebastian Bergmann",
+ "email": "sebastian@phpunit.de",
+ "role": "lead"
+ }
+ ],
+ "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+ "homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/sebastianbergmann",
+ "type": "github"
+ }
+ ],
+ "time": "2020-09-28T06:39:44+00:00"
+ },
+ {
+ "name": "seld/jsonlint",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/jsonlint.git",
+ "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/1748aaf847fc731cfad7725aec413ee46f0cc3a2",
+ "reference": "1748aaf847fc731cfad7725aec413ee46f0cc3a2",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.3 || ^7.0 || ^8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.11",
+ "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^8.5.13"
+ },
+ "bin": [
+ "bin/jsonlint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Seld\\JsonLint\\": "src/Seld/JsonLint/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "https://seld.be"
+ }
+ ],
+ "description": "JSON Linter",
+ "keywords": [
+ "json",
+ "linter",
+ "parser",
+ "validator"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/jsonlint/issues",
+ "source": "https://github.com/Seldaek/jsonlint/tree/1.11.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/Seldaek",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/seld/jsonlint",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-11T14:55:45+00:00"
+ },
+ {
+ "name": "seld/phar-utils",
+ "version": "1.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/phar-utils.git",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "reference": "ea2f4014f163c1be4c601b9b7bd6af81ba8d701c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\PharUtils\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be"
+ }
+ ],
+ "description": "PHAR file format utilities, for when PHP phars you up",
+ "keywords": [
+ "phar"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/phar-utils/issues",
+ "source": "https://github.com/Seldaek/phar-utils/tree/1.2.1"
+ },
+ "time": "2022-08-31T10:31:18+00:00"
+ },
+ {
+ "name": "seld/signal-handler",
+ "version": "2.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/signal-handler.git",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/signal-handler/zipball/04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "reference": "04a6112e883ad76c0ada8e4a9f7520bbfdb6bb98",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.0"
+ },
+ "require-dev": {
+ "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-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Seld\\Signal\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "Simple unix signal handler that silently fails where signals are not supported for easy cross-platform development",
+ "keywords": [
+ "posix",
+ "sigint",
+ "signal",
+ "sigterm",
+ "unix"
+ ],
+ "support": {
+ "issues": "https://github.com/Seldaek/signal-handler/issues",
+ "source": "https://github.com/Seldaek/signal-handler/tree/2.0.2"
+ },
+ "time": "2023-09-03T09:24:00+00:00"
+ },
+ {
+ "name": "sirbrillig/phpcs-variable-analysis",
+ "version": "v2.12.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git",
+ "reference": "4debf5383d9ade705e0a25121f16c3fecaf433a7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/4debf5383d9ade705e0a25121f16c3fecaf433a7",
+ "reference": "4debf5383d9ade705e0a25121f16c3fecaf433a7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0",
+ "squizlabs/php_codesniffer": "^3.5.6"
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.0",
+ "phpcsstandards/phpcsdevcs": "^1.1",
+ "phpstan/phpstan": "^1.7",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.5 || ^7.0 || ^8.0 || ^9.0 || ^10.5.32 || ^11.3.3",
+ "vimeo/psalm": "^0.2 || ^0.3 || ^1.1 || ^4.24 || ^5.0"
+ },
+ "type": "phpcodesniffer-standard",
+ "autoload": {
+ "psr-4": {
+ "VariableAnalysis\\": "VariableAnalysis/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-2-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Sam Graham",
+ "email": "php-codesniffer-variableanalysis@illusori.co.uk"
+ },
+ {
+ "name": "Payton Swick",
+ "email": "payton@foolord.com"
+ }
+ ],
+ "description": "A PHPCS sniff to detect problems with variables.",
+ "keywords": [
+ "phpcs",
+ "static analysis"
+ ],
+ "support": {
+ "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues",
+ "source": "https://github.com/sirbrillig/phpcs-variable-analysis",
+ "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki"
+ },
+ "time": "2025-03-17T16:17:38+00:00"
+ },
+ {
+ "name": "slevomat/coding-standard",
+ "version": "8.17.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/slevomat/coding-standard.git",
+ "reference": "ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0",
+ "reference": "ace04a4e2e20c9bc26ad14d6c4c737cde6056ec0",
+ "shasum": ""
+ },
+ "require": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0",
+ "php": "^7.4 || ^8.0",
+ "phpstan/phpdoc-parser": "^2.1.0",
+ "squizlabs/php_codesniffer": "^3.12.1"
+ },
+ "require-dev": {
+ "phing/phing": "3.0.1",
+ "php-parallel-lint/php-parallel-lint": "1.4.0",
+ "phpstan/phpstan": "2.1.11",
+ "phpstan/phpstan-deprecation-rules": "2.0.1",
+ "phpstan/phpstan-phpunit": "2.0.6",
+ "phpstan/phpstan-strict-rules": "2.0.4",
+ "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.17|12.1.2"
+ },
+ "type": "phpcodesniffer-standard",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "8.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SlevomatCodingStandard\\": "SlevomatCodingStandard/"
+ }
+ },
+ "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.",
+ "keywords": [
+ "dev",
+ "phpcs"
+ ],
+ "support": {
+ "issues": "https://github.com/slevomat/coding-standard/issues",
+ "source": "https://github.com/slevomat/coding-standard/tree/8.17.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/kukulich",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-04-10T06:06:16+00:00"
+ },
+ {
+ "name": "softcreatr/jsonpath",
+ "version": "0.7.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/SoftCreatR/JSONPath.git",
+ "reference": "e04c02cb78bcc242c69d17dac5b29436bf3e1076"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/SoftCreatR/JSONPath/zipball/e04c02cb78bcc242c69d17dac5b29436bf3e1076",
+ "reference": "e04c02cb78bcc242c69d17dac5b29436bf3e1076",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": ">=7.1,<8.0"
+ },
+ "replace": {
+ "flow/jsonpath": "*"
+ },
+ "require-dev": {
+ "phpunit/phpunit": ">=7.0",
+ "roave/security-advisories": "dev-latest",
+ "squizlabs/php_codesniffer": "^3.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Flow\\JSONPath\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Stephen Frank",
+ "email": "stephen@flowsa.com",
+ "homepage": "https://prismaticbytes.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Sascha Greuel",
+ "email": "hello@1-2.dev",
+ "homepage": "https://1-2.dev",
+ "role": "Developer"
+ }
+ ],
+ "description": "JSONPath implementation for parsing, searching and flattening arrays",
+ "support": {
+ "email": "hello@1-2.dev",
+ "forum": "https://github.com/SoftCreatR/JSONPath/discussions",
+ "issues": "https://github.com/SoftCreatR/JSONPath/issues",
+ "source": "https://github.com/SoftCreatR/JSONPath"
+ },
+ "funding": [
+ {
+ "url": "https://ecologi.com/softcreatr?r=61212ab3fc69b8eb8a2014f4",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/softcreatr",
+ "type": "github"
+ }
+ ],
+ "time": "2022-09-27T09:27:12+00:00"
+ },
+ {
+ "name": "spatie/array-to-xml",
+ "version": "2.17.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/spatie/array-to-xml.git",
+ "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
+ "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "mockery/mockery": "^1.2",
+ "pestphp/pest": "^1.21",
+ "phpunit/phpunit": "^9.0",
+ "spatie/pest-plugin-snapshots": "^1.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Spatie\\ArrayToXml\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Freek Van der Herten",
+ "email": "freek@spatie.be",
+ "homepage": "https://freek.dev",
+ "role": "Developer"
+ }
+ ],
+ "description": "Convert an array to xml",
+ "homepage": "https://github.com/spatie/array-to-xml",
+ "keywords": [
+ "array",
+ "convert",
+ "xml"
+ ],
+ "support": {
+ "source": "https://github.com/spatie/array-to-xml/tree/2.17.1"
+ },
+ "funding": [
+ {
+ "url": "https://spatie.be/open-source/support-us",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/spatie",
+ "type": "github"
+ }
+ ],
+ "time": "2022-12-26T08:22:07+00:00"
+ },
+ {
+ "name": "squizlabs/php_codesniffer",
+ "version": "3.12.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git",
+ "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
+ "reference": "6d4cf6032d4b718f168c90a96e36c7d0eaacb2aa",
+ "shasum": ""
+ },
+ "require": {
+ "ext-simplexml": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4"
+ },
+ "bin": [
+ "bin/phpcbf",
+ "bin/phpcs"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Greg Sherwood",
+ "role": "Former lead"
+ },
+ {
+ "name": "Juliette Reinders Folmer",
+ "role": "Current lead"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors"
+ }
+ ],
+ "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS 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/PHPCSStandards/PHP_CodeSniffer/issues",
+ "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy",
+ "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer",
+ "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/PHPCSStandards",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/jrfnl",
+ "type": "github"
+ },
+ {
+ "url": "https://opencollective.com/php_codesniffer",
+ "type": "open_collective"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/phpcsstandards",
+ "type": "thanks_dev"
+ }
+ ],
+ "time": "2025-04-13T04:10:18+00:00"
+ },
+ {
+ "name": "symfony/browser-kit",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/browser-kit.git",
+ "reference": "03cce39764429e07fbab9b989a1182a24578341d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/03cce39764429e07fbab9b989a1182a24578341d",
+ "reference": "03cce39764429e07fbab9b989a1182a24578341d",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/dom-crawler": "^4.4|^5.0|^6.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "symfony/css-selector": "^4.4|^5.0|^6.0",
+ "symfony/http-client": "^4.4|^5.0|^6.0",
+ "symfony/mime": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\BrowserKit\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/browser-kit/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-10-22T13:05:35+00:00"
+ },
+ {
+ "name": "symfony/console",
+ "version": "v5.4.47",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/console.git",
+ "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/console/zipball/c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+ "reference": "c4ba980ca61a9eb18ee6bcc73f28e475852bb1ed",
+ "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"
+ },
+ "suggest": {
+ "psr/log": "For using the console logger",
+ "symfony/event-dispatcher": "",
+ "symfony/lock": "",
+ "symfony/process": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Console\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases the creation of beautiful and testable command line interfaces",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "cli",
+ "command-line",
+ "console",
+ "terminal"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v5.4.47"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-06T11:30:55+00:00"
+ },
+ {
+ "name": "symfony/css-selector",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/css-selector.git",
+ "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/4f7f3c35fba88146b56d0025d20ace3f3901f097",
+ "reference": "4f7f3c35fba88146b56d0025d20ace3f3901f097",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\CssSelector\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Jean-François Simon",
+ "email": "jeanfrancois.simon@sensiolabs.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Converts CSS selectors to XPath expressions",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/dom-crawler",
+ "version": "v5.4.48",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/dom-crawler.git",
+ "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b57df76f4757a9a8dfbb57ba48d7780cc20776c6",
+ "reference": "b57df76f4757a9a8dfbb57ba48d7780cc20776c6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "masterminds/html5": "<2.6"
+ },
+ "require-dev": {
+ "masterminds/html5": "^2.6",
+ "symfony/css-selector": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/css-selector": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\DomCrawler\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Eases DOM navigation for HTML and XML documents",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/dom-crawler/tree/v5.4.48"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-13T14:36:38+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher.git",
+ "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/72982eb416f61003e9bb6e91f8b3213600dcf9e9",
+ "reference": "72982eb416f61003e9bb6e91f8b3213600dcf9e9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/event-dispatcher-contracts": "^2|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "symfony/dependency-injection": "<4.4"
+ },
+ "provide": {
+ "psr/event-dispatcher-implementation": "1.0",
+ "symfony/event-dispatcher-implementation": "2.0"
+ },
+ "require-dev": {
+ "psr/log": "^1|^2|^3",
+ "symfony/config": "^4.4|^5.0|^6.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/error-handler": "^4.4|^5.0|^6.0",
+ "symfony/expression-language": "^4.4|^5.0|^6.0",
+ "symfony/http-foundation": "^4.4|^5.0|^6.0",
+ "symfony/service-contracts": "^1.1|^2|^3",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ },
+ "suggest": {
+ "symfony/dependency-injection": "",
+ "symfony/http-kernel": ""
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\EventDispatcher\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/event-dispatcher-contracts",
+ "version": "v2.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/event-dispatcher-contracts.git",
+ "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f",
+ "reference": "e0fe3d79b516eb75126ac6fa4cbf19b79b08c99f",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/event-dispatcher": "^1"
+ },
+ "suggest": {
+ "symfony/event-dispatcher-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\EventDispatcher\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to dispatching event",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/filesystem",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/filesystem.git",
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
+ "reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-mbstring": "~1.8",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "require-dev": {
+ "symfony/process": "^5.4|^6.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Filesystem\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides basic utilities for the filesystem",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/filesystem/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-10-22T13:05:35+00:00"
+ },
+ {
+ "name": "symfony/finder",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/finder.git",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/63741784cd7b9967975eec610b256eed3ede022b",
+ "reference": "63741784cd7b9967975eec610b256eed3ede022b",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Finder\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Finds files and directories via an intuitive fluent interface",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/finder/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-28T13:32:08+00:00"
+ },
+ {
+ "name": "symfony/polyfill-ctype",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-ctype.git",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-ctype": "*"
+ },
+ "suggest": {
+ "ext-ctype": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Ctype\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Gert de Pagter",
+ "email": "BackEndTea@gmail.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for ctype functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "ctype",
+ "polyfill",
+ "portable"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-grapheme",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's grapheme_* functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "grapheme",
+ "intl",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-intl-normalizer",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
+ "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "suggest": {
+ "ext-intl": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for intl's Normalizer class and related functions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "intl",
+ "normalizer",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-mbstring",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-mbstring.git",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "provide": {
+ "ext-mbstring": "*"
+ },
+ "suggest": {
+ "ext-mbstring": "For best performance"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Mbstring\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill for the Mbstring extension",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "mbstring",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-01-02T08:10:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php81",
+ "version": "v1.32.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php81.git",
+ "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+ "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php81\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php81/tree/v1.32.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/string",
+ "version": "v5.4.47",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/string.git",
+ "reference": "136ca7d72f72b599f2631aca474a4f8e26719799"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799",
+ "reference": "136ca7d72f72b599f2631aca474a4f8e26719799",
+ "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"
+ },
+ "conflict": {
+ "symfony/translation-contracts": ">=3.0"
+ },
+ "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"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\String\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "grapheme",
+ "i18n",
+ "string",
+ "unicode",
+ "utf-8",
+ "utf8"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/string/tree/v5.4.47"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-10T20:33:58+00:00"
+ },
+ {
+ "name": "symfony/yaml",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/yaml.git",
+ "reference": "a454d47278cc16a5db371fe73ae66a78a633371e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/a454d47278cc16a5db371fe73ae66a78a633371e",
+ "reference": "a454d47278cc16a5db371fe73ae66a78a633371e",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-ctype": "^1.8"
+ },
+ "conflict": {
+ "symfony/console": "<5.3"
+ },
+ "require-dev": {
+ "symfony/console": "^5.3|^6.0"
+ },
+ "suggest": {
+ "symfony/console": "For validating YAML files using the lint command"
+ },
+ "bin": [
+ "Resources/bin/yaml-lint"
+ ],
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\Yaml\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Loads and dumps YAML files",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "szepeviktor/phpstan-wordpress",
+ "version": "v2.0.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/szepeviktor/phpstan-wordpress.git",
+ "reference": "f7beb13cd22998e3d913fdb897a1e2553ccd637e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/f7beb13cd22998e3d913fdb897a1e2553ccd637e",
+ "reference": "f7beb13cd22998e3d913fdb897a1e2553ccd637e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0",
+ "php-stubs/wordpress-stubs": "^6.6.2",
+ "phpstan/phpstan": "^2.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2.1.14",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpstan/phpstan-strict-rules": "^2.0",
+ "phpunit/phpunit": "^9.0",
+ "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.0",
+ "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
+ },
+ "suggest": {
+ "swissspidy/phpstan-no-private": "Detect usage of internal core functions, classes and methods"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SzepeViktor\\PHPStan\\WordPress\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WordPress extensions for PHPStan",
+ "keywords": [
+ "PHPStan",
+ "code analyse",
+ "code analysis",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
+ "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v2.0.1"
+ },
+ "time": "2024-12-01T02:13:05+00:00"
+ },
+ {
+ "name": "theseer/tokenizer",
+ "version": "1.2.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/theseer/tokenizer.git",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+ "shasum": ""
+ },
+ "require": {
+ "ext-dom": "*",
+ "ext-tokenizer": "*",
+ "ext-xmlwriter": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Arne Blankerts",
+ "email": "arne@blankerts.de",
+ "role": "Developer"
+ }
+ ],
+ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+ "support": {
+ "issues": "https://github.com/theseer/tokenizer/issues",
+ "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/theseer",
+ "type": "github"
+ }
+ ],
+ "time": "2024-03-03T12:36:25+00:00"
+ },
+ {
+ "name": "vimeo/psalm",
+ "version": "5.26.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vimeo/psalm.git",
+ "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
+ "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
+ "shasum": ""
+ },
+ "require": {
+ "amphp/amp": "^2.4.2",
+ "amphp/byte-stream": "^1.5",
+ "composer-runtime-api": "^2",
+ "composer/semver": "^1.4 || ^2.0 || ^3.0",
+ "composer/xdebug-handler": "^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.1",
+ "felixfbecker/language-server-protocol": "^1.5.2",
+ "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0",
+ "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
+ "nikic/php-parser": "^4.17",
+ "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
+ "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
+ "spatie/array-to-xml": "^2.17.0 || ^3.0",
+ "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0",
+ "symfony/filesystem": "^5.4 || ^6.0 || ^7.0"
+ },
+ "conflict": {
+ "nikic/php-parser": "4.17.0"
+ },
+ "provide": {
+ "psalm/psalm": "self.version"
+ },
+ "require-dev": {
+ "amphp/phpunit-util": "^2.0",
+ "bamarni/composer-bin-plugin": "^1.4",
+ "brianium/paratest": "^6.9",
+ "ext-curl": "*",
+ "mockery/mockery": "^1.5",
+ "nunomaduro/mock-final-classes": "^1.1",
+ "php-parallel-lint/php-parallel-lint": "^1.2",
+ "phpstan/phpdoc-parser": "^1.6",
+ "phpunit/phpunit": "^9.6",
+ "psalm/plugin-mockery": "^1.1",
+ "psalm/plugin-phpunit": "^0.18",
+ "slevomat/coding-standard": "^8.4",
+ "squizlabs/php_codesniffer": "^3.6",
+ "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0"
+ },
+ "suggest": {
+ "ext-curl": "In order to send data to shepherd",
+ "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
+ },
+ "bin": [
+ "psalm",
+ "psalm-language-server",
+ "psalm-plugin",
+ "psalm-refactor",
+ "psalter"
+ ],
+ "type": "project",
+ "extra": {
+ "branch-alias": {
+ "dev-1.x": "1.x-dev",
+ "dev-2.x": "2.x-dev",
+ "dev-3.x": "3.x-dev",
+ "dev-4.x": "4.x-dev",
+ "dev-master": "5.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psalm\\": "src/Psalm/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Matthew Brown"
+ }
+ ],
+ "description": "A static analysis tool for finding errors in PHP applications",
+ "keywords": [
+ "code",
+ "inspection",
+ "php",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://psalm.dev/docs",
+ "issues": "https://github.com/vimeo/psalm/issues",
+ "source": "https://github.com/vimeo/psalm"
+ },
+ "time": "2024-09-08T18:53:08+00:00"
+ },
+ {
+ "name": "vlucas/phpdotenv",
+ "version": "v4.3.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/vlucas/phpdotenv.git",
+ "reference": "67a491df68208bef8c37092db11fa3885008efcf"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/67a491df68208bef8c37092db11fa3885008efcf",
+ "reference": "67a491df68208bef8c37092db11fa3885008efcf",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^5.5.9 || ^7.0 || ^8.0",
+ "phpoption/phpoption": "^1.7.3",
+ "symfony/polyfill-ctype": "^1.17"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.4.1",
+ "ext-filter": "*",
+ "ext-pcre": "*",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.30"
+ },
+ "suggest": {
+ "ext-filter": "Required to use the boolean validator.",
+ "ext-pcre": "Required to use most of the library."
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": true
+ },
+ "branch-alias": {
+ "dev-master": "4.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Dotenv\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Vance Lucas",
+ "email": "vance@vancelucas.com",
+ "homepage": "https://github.com/vlucas"
+ }
+ ],
+ "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.",
+ "keywords": [
+ "dotenv",
+ "env",
+ "environment"
+ ],
+ "support": {
+ "issues": "https://github.com/vlucas/phpdotenv/issues",
+ "source": "https://github.com/vlucas/phpdotenv/tree/v4.3.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2022-10-16T00:51:09+00:00"
+ },
+ {
+ "name": "webmozart/assert",
+ "version": "1.11.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/webmozarts/assert.git",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "php": "^7.2 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<0.12.20",
+ "vimeo/psalm": "<4.6.1 || 4.6.2"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^8.5.13"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.10-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Webmozart\\Assert\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Bernhard Schussek",
+ "email": "bschussek@gmail.com"
+ }
+ ],
+ "description": "Assertions to validate method input/output with nice error messages.",
+ "keywords": [
+ "assert",
+ "check",
+ "validate"
+ ],
+ "support": {
+ "issues": "https://github.com/webmozarts/assert/issues",
+ "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ },
+ "time": "2022-06-03T18:03:27+00:00"
+ },
+ {
+ "name": "wp-cli/cache-command",
+ "version": "v2.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/cache-command.git",
+ "reference": "14f76b0bc8f9fa0a680e9c70e18fcf627774d055"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/cache-command/zipball/14f76b0bc8f9fa0a680e9c70e18fcf627774d055",
+ "reference": "14f76b0bc8f9fa0a680e9c70e18fcf627774d055",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "cache",
+ "cache add",
+ "cache decr",
+ "cache delete",
+ "cache flush",
+ "cache flush-group",
+ "cache get",
+ "cache incr",
+ "cache patch",
+ "cache pluck",
+ "cache replace",
+ "cache set",
+ "cache supports",
+ "cache type",
+ "transient",
+ "transient delete",
+ "transient get",
+ "transient list",
+ "transient patch",
+ "transient pluck",
+ "transient set",
+ "transient type"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "cache-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Manages object and transient caches.",
+ "homepage": "https://github.com/wp-cli/cache-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/cache-command/issues",
+ "source": "https://github.com/wp-cli/cache-command/tree/v2.2.0"
+ },
+ "time": "2025-05-06T01:43:20+00:00"
+ },
+ {
+ "name": "wp-cli/checksum-command",
+ "version": "v2.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/checksum-command.git",
+ "reference": "39992dbd66835f8d5c2cc5bfeacf9d2c450cbafe"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/checksum-command/zipball/39992dbd66835f8d5c2cc5bfeacf9d2c450cbafe",
+ "reference": "39992dbd66835f8d5c2cc5bfeacf9d2c450cbafe",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "core verify-checksums",
+ "plugin verify-checksums"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "checksum-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Verifies file integrity by comparing to published checksums.",
+ "homepage": "https://github.com/wp-cli/checksum-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/checksum-command/issues",
+ "source": "https://github.com/wp-cli/checksum-command/tree/v2.3.1"
+ },
+ "time": "2025-04-10T11:02:20+00:00"
+ },
+ {
+ "name": "wp-cli/config-command",
+ "version": "v2.3.8",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/config-command.git",
+ "reference": "994b3dc9e8284fc978366920d5c5ae0dde3a004e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/config-command/zipball/994b3dc9e8284fc978366920d5c5ae0dde3a004e",
+ "reference": "994b3dc9e8284fc978366920d5c5ae0dde3a004e",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12",
+ "wp-cli/wp-config-transformer": "^1.4.0"
+ },
+ "require-dev": {
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4.2.8"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "config",
+ "config edit",
+ "config delete",
+ "config create",
+ "config get",
+ "config has",
+ "config is-true",
+ "config list",
+ "config path",
+ "config set",
+ "config shuffle-salts"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "config-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ },
+ {
+ "name": "Alain Schlesser",
+ "email": "alain.schlesser@gmail.com",
+ "homepage": "https://www.alainschlesser.com"
+ }
+ ],
+ "description": "Generates and reads the wp-config.php file.",
+ "homepage": "https://github.com/wp-cli/config-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/config-command/issues",
+ "source": "https://github.com/wp-cli/config-command/tree/v2.3.8"
+ },
+ "time": "2025-04-11T09:37:43+00:00"
+ },
+ {
+ "name": "wp-cli/core-command",
+ "version": "v2.1.20",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/core-command.git",
+ "reference": "83e4692784a815bb7f5df10b72204f237b5224b9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/core-command/zipball/83e4692784a815bb7f5df10b72204f237b5224b9",
+ "reference": "83e4692784a815bb7f5df10b72204f237b5224b9",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4 || ^2 || ^3",
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/checksum-command": "^1 || ^2",
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "core",
+ "core check-update",
+ "core download",
+ "core install",
+ "core is-installed",
+ "core multisite-convert",
+ "core multisite-install",
+ "core update",
+ "core update-db",
+ "core version"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "core-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Downloads, installs, updates, and manages a WordPress installation.",
+ "homepage": "https://github.com/wp-cli/core-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/core-command/issues",
+ "source": "https://github.com/wp-cli/core-command/tree/v2.1.20"
+ },
+ "time": "2025-04-16T11:23:00+00:00"
+ },
+ {
+ "name": "wp-cli/cron-command",
+ "version": "v2.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/cron-command.git",
+ "reference": "6f450028a75ebd275f12cad62959a0709bf3e7c1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/cron-command/zipball/6f450028a75ebd275f12cad62959a0709bf3e7c1",
+ "reference": "6f450028a75ebd275f12cad62959a0709bf3e7c1",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/eval-command": "^2.0",
+ "wp-cli/server-command": "^2.0",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "cron",
+ "cron test",
+ "cron event",
+ "cron event delete",
+ "cron event list",
+ "cron event run",
+ "cron event schedule",
+ "cron schedule",
+ "cron schedule list",
+ "cron event unschedule"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "cron-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Tests, runs, and deletes WP-Cron events; manages WP-Cron schedules.",
+ "homepage": "https://github.com/wp-cli/cron-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/cron-command/issues",
+ "source": "https://github.com/wp-cli/cron-command/tree/v2.3.2"
+ },
+ "time": "2025-04-02T11:55:20+00:00"
+ },
+ {
+ "name": "wp-cli/db-command",
+ "version": "v2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/db-command.git",
+ "reference": "f857c91454d7092fa672bc388512a51752d9264a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/db-command/zipball/f857c91454d7092fa672bc388512a51752d9264a",
+ "reference": "f857c91454d7092fa672bc388512a51752d9264a",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "db",
+ "db clean",
+ "db create",
+ "db drop",
+ "db reset",
+ "db check",
+ "db optimize",
+ "db prefix",
+ "db repair",
+ "db cli",
+ "db query",
+ "db export",
+ "db import",
+ "db search",
+ "db tables",
+ "db size",
+ "db columns"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "db-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Performs basic database operations using credentials stored in wp-config.php.",
+ "homepage": "https://github.com/wp-cli/db-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/db-command/issues",
+ "source": "https://github.com/wp-cli/db-command/tree/v2.1.3"
+ },
+ "time": "2025-04-10T11:02:04+00:00"
+ },
+ {
+ "name": "wp-cli/embed-command",
+ "version": "v2.0.18",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/embed-command.git",
+ "reference": "52f59a1dacf1d4a1c68fd685f27909e1f493816b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/embed-command/zipball/52f59a1dacf1d4a1c68fd685f27909e1f493816b",
+ "reference": "52f59a1dacf1d4a1c68fd685f27909e1f493816b",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "embed",
+ "embed fetch",
+ "embed provider",
+ "embed provider list",
+ "embed provider match",
+ "embed handler",
+ "embed handler list",
+ "embed cache",
+ "embed cache clear",
+ "embed cache find",
+ "embed cache trigger"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "embed-command.php"
+ ],
+ "psr-4": {
+ "WP_CLI\\Embeds\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Pascal Birchler",
+ "homepage": "https://pascalbirchler.com/"
+ }
+ ],
+ "description": "Inspects oEmbed providers, clears embed cache, and more.",
+ "homepage": "https://github.com/wp-cli/embed-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/embed-command/issues",
+ "source": "https://github.com/wp-cli/embed-command/tree/v2.0.18"
+ },
+ "time": "2025-04-10T11:01:32+00:00"
+ },
+ {
+ "name": "wp-cli/entity-command",
+ "version": "v2.8.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/entity-command.git",
+ "reference": "213611f8ab619ca137d983e9b987f7fbf1ac21d4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/entity-command/zipball/213611f8ab619ca137d983e9b987f7fbf1ac21d4",
+ "reference": "213611f8ab619ca137d983e9b987f7fbf1ac21d4",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/cache-command": "^1 || ^2",
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/media-command": "^1.1 || ^2",
+ "wp-cli/super-admin-command": "^1 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "comment",
+ "comment approve",
+ "comment count",
+ "comment create",
+ "comment delete",
+ "comment exists",
+ "comment generate",
+ "comment get",
+ "comment list",
+ "comment meta",
+ "comment meta add",
+ "comment meta delete",
+ "comment meta get",
+ "comment meta list",
+ "comment meta patch",
+ "comment meta pluck",
+ "comment meta update",
+ "comment recount",
+ "comment spam",
+ "comment status",
+ "comment trash",
+ "comment unapprove",
+ "comment unspam",
+ "comment untrash",
+ "comment update",
+ "menu",
+ "menu create",
+ "menu delete",
+ "menu item",
+ "menu item add-custom",
+ "menu item add-post",
+ "menu item add-term",
+ "menu item delete",
+ "menu item list",
+ "menu item update",
+ "menu list",
+ "menu location",
+ "menu location assign",
+ "menu location list",
+ "menu location remove",
+ "network meta",
+ "network meta add",
+ "network meta delete",
+ "network meta get",
+ "network meta list",
+ "network meta patch",
+ "network meta pluck",
+ "network meta update",
+ "option",
+ "option add",
+ "option delete",
+ "option get",
+ "option list",
+ "option patch",
+ "option pluck",
+ "option update",
+ "option set-autoload",
+ "option get-autoload",
+ "post",
+ "post create",
+ "post delete",
+ "post edit",
+ "post exists",
+ "post generate",
+ "post get",
+ "post list",
+ "post meta",
+ "post meta add",
+ "post meta clean-duplicates",
+ "post meta delete",
+ "post meta get",
+ "post meta list",
+ "post meta patch",
+ "post meta pluck",
+ "post meta update",
+ "post term",
+ "post term add",
+ "post term list",
+ "post term remove",
+ "post term set",
+ "post update",
+ "post url-to-id",
+ "post-type",
+ "post-type get",
+ "post-type list",
+ "site",
+ "site activate",
+ "site archive",
+ "site create",
+ "site generate",
+ "site deactivate",
+ "site delete",
+ "site empty",
+ "site list",
+ "site mature",
+ "site meta",
+ "site meta add",
+ "site meta delete",
+ "site meta get",
+ "site meta list",
+ "site meta patch",
+ "site meta pluck",
+ "site meta update",
+ "site option",
+ "site private",
+ "site public",
+ "site spam",
+ "site unarchive",
+ "site unmature",
+ "site unspam",
+ "taxonomy",
+ "taxonomy get",
+ "taxonomy list",
+ "term",
+ "term create",
+ "term delete",
+ "term generate",
+ "term get",
+ "term list",
+ "term meta",
+ "term meta add",
+ "term meta delete",
+ "term meta get",
+ "term meta list",
+ "term meta patch",
+ "term meta pluck",
+ "term meta update",
+ "term recount",
+ "term update",
+ "user",
+ "user add-cap",
+ "user add-role",
+ "user application-password",
+ "user application-password create",
+ "user application-password delete",
+ "user application-password exists",
+ "user application-password get",
+ "user application-password list",
+ "user application-password record-usage",
+ "user application-password update",
+ "user create",
+ "user delete",
+ "user exists",
+ "user generate",
+ "user get",
+ "user import-csv",
+ "user list",
+ "user list-caps",
+ "user meta",
+ "user meta add",
+ "user meta delete",
+ "user meta get",
+ "user meta list",
+ "user meta patch",
+ "user meta pluck",
+ "user meta update",
+ "user remove-cap",
+ "user remove-role",
+ "user reset-password",
+ "user session",
+ "user session destroy",
+ "user session list",
+ "user set-role",
+ "user signup",
+ "user signup activate",
+ "user signup delete",
+ "user signup get",
+ "user signup list",
+ "user spam",
+ "user term",
+ "user term add",
+ "user term list",
+ "user term remove",
+ "user term set",
+ "user unspam",
+ "user update"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "entity-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Manage WordPress comments, menus, options, posts, sites, terms, and users.",
+ "homepage": "https://github.com/wp-cli/entity-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/entity-command/issues",
+ "source": "https://github.com/wp-cli/entity-command/tree/v2.8.4"
+ },
+ "time": "2025-05-06T16:12:49+00:00"
+ },
+ {
+ "name": "wp-cli/eval-command",
+ "version": "v2.2.6",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/eval-command.git",
+ "reference": "20ec428a7b9bc604fab0bd33ee8fa20662650455"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/eval-command/zipball/20ec428a7b9bc604fab0bd33ee8fa20662650455",
+ "reference": "20ec428a7b9bc604fab0bd33ee8fa20662650455",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "eval",
+ "eval-file"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "eval-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Executes arbitrary PHP code or files.",
+ "homepage": "https://github.com/wp-cli/eval-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/eval-command/issues",
+ "source": "https://github.com/wp-cli/eval-command/tree/v2.2.6"
+ },
+ "time": "2024-11-24T17:28:06+00:00"
+ },
+ {
+ "name": "wp-cli/export-command",
+ "version": "v2.1.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/export-command.git",
+ "reference": "2af32bf12c1bccd6561a215dbbafc2f272647ee8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/export-command/zipball/2af32bf12c1bccd6561a215dbbafc2f272647ee8",
+ "reference": "2af32bf12c1bccd6561a215dbbafc2f272647ee8",
+ "shasum": ""
+ },
+ "require": {
+ "nb/oxymel": "~0.1.0",
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/import-command": "^1 || ^2",
+ "wp-cli/media-command": "^1 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "export"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "export-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Exports WordPress content to a WXR file.",
+ "homepage": "https://github.com/wp-cli/export-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/export-command/issues",
+ "source": "https://github.com/wp-cli/export-command/tree/v2.1.14"
+ },
+ "time": "2025-04-02T15:29:08+00:00"
+ },
+ {
+ "name": "wp-cli/extension-command",
+ "version": "v2.1.24",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/extension-command.git",
+ "reference": "d21a2f504ac43a86b6b08697669b5b0844748133"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/extension-command/zipball/d21a2f504ac43a86b6b08697669b5b0844748133",
+ "reference": "d21a2f504ac43a86b6b08697669b5b0844748133",
+ "shasum": ""
+ },
+ "require": {
+ "composer/semver": "^1.4 || ^2 || ^3",
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/cache-command": "^2.0",
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/language-command": "^2.0",
+ "wp-cli/scaffold-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4.3.7"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "plugin",
+ "plugin activate",
+ "plugin deactivate",
+ "plugin delete",
+ "plugin get",
+ "plugin install",
+ "plugin is-installed",
+ "plugin list",
+ "plugin path",
+ "plugin search",
+ "plugin status",
+ "plugin toggle",
+ "plugin uninstall",
+ "plugin update",
+ "theme",
+ "theme activate",
+ "theme delete",
+ "theme disable",
+ "theme enable",
+ "theme get",
+ "theme install",
+ "theme is-installed",
+ "theme list",
+ "theme mod",
+ "theme mod get",
+ "theme mod set",
+ "theme mod remove",
+ "theme path",
+ "theme search",
+ "theme status",
+ "theme update",
+ "theme mod list"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "extension-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ },
+ {
+ "name": "Alain Schlesser",
+ "email": "alain.schlesser@gmail.com",
+ "homepage": "https://www.alainschlesser.com"
+ }
+ ],
+ "description": "Manages plugins and themes, including installs, activations, and updates.",
+ "homepage": "https://github.com/wp-cli/extension-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/extension-command/issues",
+ "source": "https://github.com/wp-cli/extension-command/tree/v2.1.24"
+ },
+ "time": "2025-05-06T19:17:53+00:00"
+ },
+ {
+ "name": "wp-cli/i18n-command",
+ "version": "v2.6.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/i18n-command.git",
+ "reference": "5e73d417398993625331a9f69f6c2ef60f234070"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/i18n-command/zipball/5e73d417398993625331a9f69f6c2ef60f234070",
+ "reference": "5e73d417398993625331a9f69f6c2ef60f234070",
+ "shasum": ""
+ },
+ "require": {
+ "eftec/bladeone": "3.52",
+ "gettext/gettext": "^4.8",
+ "mck89/peast": "^1.13.11",
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/scaffold-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4.3.9"
+ },
+ "suggest": {
+ "ext-json": "Used for reading and generating JSON translation files",
+ "ext-mbstring": "Used for calculating include/exclude matches in code extraction"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "i18n",
+ "i18n make-pot",
+ "i18n make-json",
+ "i18n make-mo",
+ "i18n make-php",
+ "i18n update-po"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "i18n-command.php"
+ ],
+ "psr-4": {
+ "WP_CLI\\I18n\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Pascal Birchler",
+ "homepage": "https://pascalbirchler.com/"
+ }
+ ],
+ "description": "Provides internationalization tools for WordPress projects.",
+ "homepage": "https://github.com/wp-cli/i18n-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/i18n-command/issues",
+ "source": "https://github.com/wp-cli/i18n-command/tree/v2.6.5"
+ },
+ "time": "2025-04-25T21:49:29+00:00"
+ },
+ {
+ "name": "wp-cli/import-command",
+ "version": "v2.0.14",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/import-command.git",
+ "reference": "b2c48f3e51683e825738df62bf8ccc7004c5f0f9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/import-command/zipball/b2c48f3e51683e825738df62bf8ccc7004c5f0f9",
+ "reference": "b2c48f3e51683e825738df62bf8ccc7004c5f0f9",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/export-command": "^1 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "import"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "import-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Imports content from a given WXR file.",
+ "homepage": "https://github.com/wp-cli/import-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/import-command/issues",
+ "source": "https://github.com/wp-cli/import-command/tree/v2.0.14"
+ },
+ "time": "2025-04-02T16:47:25+00:00"
+ },
+ {
+ "name": "wp-cli/language-command",
+ "version": "v2.0.23",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/language-command.git",
+ "reference": "7221cc39d2b14fd39e55aa7884889f26eec2f822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/language-command/zipball/7221cc39d2b14fd39e55aa7884889f26eec2f822",
+ "reference": "7221cc39d2b14fd39e55aa7884889f26eec2f822",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "language",
+ "language core",
+ "language core activate",
+ "language core is-installed",
+ "language core install",
+ "language core list",
+ "language core uninstall",
+ "language core update",
+ "language plugin",
+ "language plugin is-installed",
+ "language plugin install",
+ "language plugin list",
+ "language plugin uninstall",
+ "language plugin update",
+ "language theme",
+ "language theme is-installed",
+ "language theme install",
+ "language theme list",
+ "language theme uninstall",
+ "language theme update",
+ "site switch-language"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "language-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Installs, activates, and manages language packs.",
+ "homepage": "https://github.com/wp-cli/language-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/language-command/issues",
+ "source": "https://github.com/wp-cli/language-command/tree/v2.0.23"
+ },
+ "time": "2025-04-10T11:09:04+00:00"
+ },
+ {
+ "name": "wp-cli/maintenance-mode-command",
+ "version": "v2.1.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/maintenance-mode-command.git",
+ "reference": "b947e094e00b7b68c6376ec9bd03303515864062"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/maintenance-mode-command/zipball/b947e094e00b7b68c6376ec9bd03303515864062",
+ "reference": "b947e094e00b7b68c6376ec9bd03303515864062",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "maintenance-mode",
+ "maintenance-mode activate",
+ "maintenance-mode deactivate",
+ "maintenance-mode status",
+ "maintenance-mode is-active"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "maintenance-mode-command.php"
+ ],
+ "psr-4": {
+ "WP_CLI\\MaintenanceMode\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Thrijith Thankachan",
+ "email": "thrijith13@gmail.com",
+ "homepage": "https://thrijith.com"
+ }
+ ],
+ "description": "Activates, deactivates or checks the status of the maintenance mode of a site.",
+ "homepage": "https://github.com/wp-cli/maintenance-mode-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/maintenance-mode-command/issues",
+ "source": "https://github.com/wp-cli/maintenance-mode-command/tree/v2.1.3"
+ },
+ "time": "2024-11-24T17:26:30+00:00"
+ },
+ {
+ "name": "wp-cli/media-command",
+ "version": "v2.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/media-command.git",
+ "reference": "a810ea0e68473fce6a234e67c6c5f19bb820a753"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/media-command/zipball/a810ea0e68473fce6a234e67c6c5f19bb820a753",
+ "reference": "a810ea0e68473fce6a234e67c6c5f19bb820a753",
+ "shasum": ""
+ },
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^2.0",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "media",
+ "media import",
+ "media regenerate",
+ "media image-size"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "media-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
+ }
+ ],
+ "description": "Imports files as attachments, regenerates thumbnails, or lists registered image sizes.",
+ "homepage": "https://github.com/wp-cli/media-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/media-command/issues",
+ "source": "https://github.com/wp-cli/media-command/tree/v2.2.2"
+ },
+ "time": "2025-04-11T09:28:29+00:00"
+ },
+ {
+ "name": "wp-cli/mustache",
+ "version": "v2.14.99",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/mustache.php.git",
+ "reference": "ca23b97ac35fbe01c160549eb634396183d04a59"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/mustache.php/zipball/ca23b97ac35fbe01c160549eb634396183d04a59",
+ "reference": "ca23b97ac35fbe01c160549eb634396183d04a59",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "replace": {
+ "mustache/mustache": "^2.14.2"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "~2.19.3",
+ "yoast/phpunit-polyfills": "^2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-0": {
+ "Mustache": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "A Mustache implementation in PHP.",
+ "homepage": "https://github.com/bobthecow/mustache.php",
+ "keywords": [
+ "mustache",
+ "templating"
+ ],
+ "support": {
+ "source": "https://github.com/wp-cli/mustache.php/tree/v2.14.99"
+ },
+ "time": "2025-05-06T16:15:37+00:00"
+ },
+ {
+ "name": "wp-cli/mustangostang-spyc",
+ "version": "0.6.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/spyc.git",
+ "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/spyc/zipball/6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
+ "reference": "6aa0b4da69ce9e9a2c8402dab8d43cf32c581cc7",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.1"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "4.3.*@dev"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "0.5.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "includes/functions.php"
+ ],
+ "psr-4": {
+ "Mustangostang\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "mustangostang",
+ "email": "vlad.andersen@gmail.com"
+ }
+ ],
+ "description": "A simple YAML loader/dumper class for PHP (WP-CLI fork)",
+ "homepage": "https://github.com/mustangostang/spyc/",
+ "support": {
+ "source": "https://github.com/wp-cli/spyc/tree/autoload"
+ },
+ "time": "2017-04-25T11:26:20+00:00"
+ },
+ {
+ "name": "wp-cli/package-command",
+ "version": "v2.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-cli/package-command.git",
+ "reference": "682d8c6bb30c782c3b09c015478c7cbe1cc727a9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-cli/package-command/zipball/682d8c6bb30c782c3b09c015478c7cbe1cc727a9",
+ "reference": "682d8c6bb30c782c3b09c015478c7cbe1cc727a9",
+ "shasum": ""
+ },
+ "require": {
+ "composer/composer": "^2.2.25",
+ "ext-json": "*",
+ "wp-cli/wp-cli": "^2.12"
+ },
+ "require-dev": {
+ "wp-cli/scaffold-command": "^1 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "package",
+ "package browse",
+ "package install",
+ "package list",
+ "package update",
+ "package uninstall"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "package-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "time": "2024-11-06T11:30:55+00:00"
+ "description": "Lists, installs, and removes WP-CLI packages.",
+ "homepage": "https://github.com/wp-cli/package-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/package-command/issues",
+ "source": "https://github.com/wp-cli/package-command/tree/v2.6.0"
+ },
+ "time": "2025-04-11T09:28:45+00:00"
},
{
- "name": "symfony/deprecation-contracts",
- "version": "v2.5.4",
+ "name": "wp-cli/php-cli-tools",
+ "version": "v0.12.5",
"source": {
"type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
+ "url": "https://github.com/wp-cli/php-cli-tools.git",
+ "reference": "34b83b4f700df8a4ec3fd17bf7e7e7d8ca5f28da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
- "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "url": "https://api.github.com/repos/wp-cli/php-cli-tools/zipball/34b83b4f700df8a4ec3fd17bf7e7e7d8ca5f28da",
+ "reference": "34b83b4f700df8a4ec3fd17bf7e7e7d8ca5f28da",
"shasum": ""
},
"require": {
- "php": ">=7.1"
+ "php": ">= 5.6.0"
+ },
+ "require-dev": {
+ "roave/security-advisories": "dev-latest",
+ "wp-cli/wp-cli-tests": "^4"
},
"type": "library",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-master": "0.11.x-dev"
}
},
"autoload": {
"files": [
- "function.php"
- ]
+ "lib/cli/cli.php"
+ ],
+ "psr-0": {
+ "cli": "lib/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2393,62 +10136,52 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@handbuilt.co",
+ "role": "Maintainer"
},
{
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "James Logsdon",
+ "email": "jlogsdon@php.net",
+ "role": "Developer"
}
],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
+ "description": "Console utilities for PHP",
+ "homepage": "http://github.com/wp-cli/php-cli-tools",
+ "keywords": [
+ "cli",
+ "console"
+ ],
"support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
+ "issues": "https://github.com/wp-cli/php-cli-tools/issues",
+ "source": "https://github.com/wp-cli/php-cli-tools/tree/v0.12.5"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:11:13+00:00"
+ "time": "2025-03-26T16:13:46+00:00"
},
{
- "name": "symfony/filesystem",
- "version": "v5.4.45",
+ "name": "wp-cli/process",
+ "version": "v5.9.99",
"source": {
"type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "57c8294ed37d4a055b77057827c67f9558c95c54"
+ "url": "https://github.com/wp-cli/process.git",
+ "reference": "f0aec5ca26a702d3157e3a19982b662521ac2b81"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/57c8294ed37d4a055b77057827c67f9558c95c54",
- "reference": "57c8294ed37d4a055b77057827c67f9558c95c54",
+ "url": "https://api.github.com/repos/wp-cli/process/zipball/f0aec5ca26a702d3157e3a19982b662521ac2b81",
+ "reference": "f0aec5ca26a702d3157e3a19982b662521ac2b81",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "php": "^5.5.9|>=7.0.8"
},
- "require-dev": {
- "symfony/process": "^5.4|^6.4"
+ "replace": {
+ "symfony/process": "^5.4.47"
},
"type": "library",
"autoload": {
"psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
+ "Symfony\\Component\\Process\\": ""
},
"exclude-from-classmap": [
"/Tests/"
@@ -2468,64 +10201,54 @@
"homepage": "https://symfony.com/contributors"
}
],
- "description": "Provides basic utilities for the filesystem",
+ "description": "Symfony Process Component",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.45"
+ "source": "https://github.com/wp-cli/process/tree/v5.9.99"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-10-22T13:05:35+00:00"
+ "time": "2025-05-06T21:26:50+00:00"
},
{
- "name": "symfony/polyfill-ctype",
- "version": "v1.31.0",
+ "name": "wp-cli/rewrite-command",
+ "version": "v2.0.15",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638"
+ "url": "https://github.com/wp-cli/rewrite-command.git",
+ "reference": "277ec689b7c268680ff429f52558508622c9b34c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638",
- "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638",
+ "url": "https://api.github.com/repos/wp-cli/rewrite-command/zipball/277ec689b7c268680ff429f52558508622c9b34c",
+ "reference": "277ec689b7c268680ff429f52558508622c9b34c",
"shasum": ""
},
"require": {
- "php": ">=7.2"
- },
- "provide": {
- "ext-ctype": "*"
+ "wp-cli/wp-cli": "^2.12"
},
- "suggest": {
- "ext-ctype": "For best performance"
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
},
- "type": "library",
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "rewrite",
+ "rewrite flush",
+ "rewrite list",
+ "rewrite structure"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "rewrite-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2533,75 +10256,65 @@
],
"authors": [
{
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
+ "description": "Lists or flushes the site's rewrite rules, updates the permalink structure.",
+ "homepage": "https://github.com/wp-cli/rewrite-command",
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0"
+ "issues": "https://github.com/wp-cli/rewrite-command/issues",
+ "source": "https://github.com/wp-cli/rewrite-command/tree/v2.0.15"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-04-02T12:09:09+00:00"
},
{
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.31.0",
+ "name": "wp-cli/role-command",
+ "version": "v2.0.16",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "url": "https://github.com/wp-cli/role-command.git",
+ "reference": "ed57fb5436b4d47954b07e56c734d19deb4fc491"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/wp-cli/role-command/zipball/ed57fb5436b4d47954b07e56c734d19deb4fc491",
+ "reference": "ed57fb5436b4d47954b07e56c734d19deb4fc491",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "wp-cli/wp-cli": "^2.12"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "wp-cli/wp-cli-tests": "^4"
},
- "type": "library",
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "role",
+ "role create",
+ "role delete",
+ "role exists",
+ "role list",
+ "role reset",
+ "cap",
+ "cap add",
+ "cap list",
+ "cap remove"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "role-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2609,161 +10322,125 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Adds, removes, lists, and resets roles and capabilities.",
+ "homepage": "https://github.com/wp-cli/role-command",
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0"
+ "issues": "https://github.com/wp-cli/role-command/issues",
+ "source": "https://github.com/wp-cli/role-command/tree/v2.0.16"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-04-02T12:24:15+00:00"
},
{
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.31.0",
+ "name": "wp-cli/scaffold-command",
+ "version": "v2.5.0",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c"
+ "url": "https://github.com/wp-cli/scaffold-command.git",
+ "reference": "b4238ea12e768b3f15d10339a53a8642f82e1d2b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c",
- "reference": "3833d7255cc303546435cb650316bff708a1c75c",
+ "url": "https://api.github.com/repos/wp-cli/scaffold-command/zipball/b4238ea12e768b3f15d10339a53a8642f82e1d2b",
+ "reference": "b4238ea12e768b3f15d10339a53a8642f82e1d2b",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "wp-cli/wp-cli": "^2.12"
},
- "suggest": {
- "ext-intl": "For best performance"
+ "require-dev": {
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
},
- "type": "library",
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "scaffold",
+ "scaffold underscores",
+ "scaffold block",
+ "scaffold child-theme",
+ "scaffold plugin",
+ "scaffold plugin-tests",
+ "scaffold post-type",
+ "scaffold taxonomy",
+ "scaffold theme-tests"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "scaffold-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
"classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0"
+ "src/"
+ ]
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
{
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "description": "Generates code for post types, taxonomies, blocks, plugins, child themes, etc.",
+ "homepage": "https://github.com/wp-cli/scaffold-command",
+ "support": {
+ "issues": "https://github.com/wp-cli/scaffold-command/issues",
+ "source": "https://github.com/wp-cli/scaffold-command/tree/v2.5.0"
+ },
+ "time": "2025-04-11T09:29:34+00:00"
},
{
- "name": "symfony/polyfill-mbstring",
- "version": "v1.31.0",
+ "name": "wp-cli/search-replace-command",
+ "version": "v2.1.8",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341"
+ "url": "https://github.com/wp-cli/search-replace-command.git",
+ "reference": "65397a7bfdd5ba2cff26f3ab03ef0bcb916c0057"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341",
- "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341",
+ "url": "https://api.github.com/repos/wp-cli/search-replace-command/zipball/65397a7bfdd5ba2cff26f3ab03ef0bcb916c0057",
+ "reference": "65397a7bfdd5ba2cff26f3ab03ef0bcb916c0057",
"shasum": ""
},
"require": {
- "php": ">=7.2"
- },
- "provide": {
- "ext-mbstring": "*"
+ "wp-cli/wp-cli": "^2.12"
},
- "suggest": {
- "ext-mbstring": "For best performance"
+ "require-dev": {
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
},
- "type": "library",
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "search-replace"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "search-replace-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- }
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2771,75 +10448,56 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Searches/replaces strings in the database.",
+ "homepage": "https://github.com/wp-cli/search-replace-command",
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0"
+ "issues": "https://github.com/wp-cli/search-replace-command/issues",
+ "source": "https://github.com/wp-cli/search-replace-command/tree/v2.1.8"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-04-02T13:07:50+00:00"
},
{
- "name": "symfony/polyfill-php73",
- "version": "v1.31.0",
+ "name": "wp-cli/server-command",
+ "version": "v2.0.15",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
+ "url": "https://github.com/wp-cli/server-command.git",
+ "reference": "80a9243f94e0ac073f9bfdb516d2ac7e1fa01a71"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
- "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "url": "https://api.github.com/repos/wp-cli/server-command/zipball/80a9243f94e0ac073f9bfdb516d2ac7e1fa01a71",
+ "reference": "80a9243f94e0ac073f9bfdb516d2ac7e1fa01a71",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "wp-cli/wp-cli": "^2.12"
},
- "type": "library",
+ "require-dev": {
+ "wp-cli/entity-command": "^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "server"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "server-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2848,74 +10506,55 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Launches PHP's built-in web server for a specific WordPress installation.",
+ "homepage": "https://github.com/wp-cli/server-command",
"support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
+ "issues": "https://github.com/wp-cli/server-command/issues",
+ "source": "https://github.com/wp-cli/server-command/tree/v2.0.15"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-04-10T11:03:13+00:00"
},
{
- "name": "symfony/polyfill-php80",
- "version": "v1.31.0",
+ "name": "wp-cli/shell-command",
+ "version": "v2.0.16",
"source": {
"type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+ "url": "https://github.com/wp-cli/shell-command.git",
+ "reference": "3af53a9f4b240e03e77e815b2ee10f229f1aa591"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
- "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "url": "https://api.github.com/repos/wp-cli/shell-command/zipball/3af53a9f4b240e03e77e815b2ee10f229f1aa591",
+ "reference": "3af53a9f4b240e03e77e815b2ee10f229f1aa591",
"shasum": ""
},
"require": {
- "php": ">=7.2"
+ "wp-cli/wp-cli": "^2.12"
},
- "type": "library",
+ "require-dev": {
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/polyfill",
- "name": "symfony/polyfill"
+ "bundled": true,
+ "commands": [
+ "shell"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
}
},
"autoload": {
"files": [
- "bootstrap.php"
+ "shell-command.php"
],
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
"classmap": [
- "Resources/stubs"
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -2924,84 +10563,60 @@
],
"authors": [
{
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
+ "description": "Opens an interactive PHP console for running and testing PHP code.",
+ "homepage": "https://github.com/wp-cli/shell-command",
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+ "issues": "https://github.com/wp-cli/shell-command/issues",
+ "source": "https://github.com/wp-cli/shell-command/tree/v2.0.16"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-04-11T09:39:33+00:00"
},
{
- "name": "symfony/service-contracts",
- "version": "v2.5.4",
+ "name": "wp-cli/super-admin-command",
+ "version": "v2.0.16",
"source": {
"type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
+ "url": "https://github.com/wp-cli/super-admin-command.git",
+ "reference": "54ac063c384743ee414806d42cb8c61c6aa1fa8e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
- "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
+ "url": "https://api.github.com/repos/wp-cli/super-admin-command/zipball/54ac063c384743ee414806d42cb8c61c6aa1fa8e",
+ "reference": "54ac063c384743ee414806d42cb8c61c6aa1fa8e",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "psr/container": "^1.1",
- "symfony/deprecation-contracts": "^2.1|^3"
+ "wp-cli/wp-cli": "^2.12"
},
- "conflict": {
- "ext-psr": "<1.1|>=2"
- },
- "suggest": {
- "symfony/service-implementation": ""
+ "require-dev": {
+ "wp-cli/entity-command": "^1.3 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
},
- "type": "library",
+ "type": "wp-cli-package",
"extra": {
- "thanks": {
- "url": "https://github.com/symfony/contracts",
- "name": "symfony/contracts"
- },
+ "bundled": true,
+ "commands": [
+ "super-admin",
+ "super-admin add",
+ "super-admin list",
+ "super-admin remove"
+ ],
"branch-alias": {
- "dev-main": "2.5-dev"
+ "dev-main": "2.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
+ "files": [
+ "super-admin-command.php"
+ ],
+ "classmap": [
+ "src/"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -3009,84 +10624,65 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
+ "description": "Lists, adds, or removes super admin users on a multisite installation.",
+ "homepage": "https://github.com/wp-cli/super-admin-command",
"support": {
- "source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
+ "issues": "https://github.com/wp-cli/super-admin-command/issues",
+ "source": "https://github.com/wp-cli/super-admin-command/tree/v2.0.16"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-09-25T14:11:13+00:00"
+ "time": "2025-04-02T13:07:32+00:00"
},
{
- "name": "symfony/string",
- "version": "v5.4.47",
+ "name": "wp-cli/widget-command",
+ "version": "v2.1.12",
"source": {
"type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "136ca7d72f72b599f2631aca474a4f8e26719799"
+ "url": "https://github.com/wp-cli/widget-command.git",
+ "reference": "73084053f7b32d92583e44d870b81f287beea6a9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/136ca7d72f72b599f2631aca474a4f8e26719799",
- "reference": "136ca7d72f72b599f2631aca474a4f8e26719799",
- "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"
+ "url": "https://api.github.com/repos/wp-cli/widget-command/zipball/73084053f7b32d92583e44d870b81f287beea6a9",
+ "reference": "73084053f7b32d92583e44d870b81f287beea6a9",
+ "shasum": ""
},
- "conflict": {
- "symfony/translation-contracts": ">=3.0"
+ "require": {
+ "wp-cli/wp-cli": "^2.12"
},
"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"
+ "wp-cli/extension-command": "^1.2 || ^2",
+ "wp-cli/wp-cli-tests": "^4"
+ },
+ "type": "wp-cli-package",
+ "extra": {
+ "bundled": true,
+ "commands": [
+ "widget",
+ "widget add",
+ "widget deactivate",
+ "widget delete",
+ "widget list",
+ "widget move",
+ "widget reset",
+ "widget update",
+ "sidebar",
+ "sidebar list"
+ ],
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
},
- "type": "library",
"autoload": {
"files": [
- "Resources/functions.php"
+ "widget-command.php"
],
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
+ "classmap": [
+ "src/"
]
},
"notification-url": "https://packagist.org/downloads/",
@@ -3095,250 +10691,192 @@
],
"authors": [
{
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
+ "name": "Daniel Bachhuber",
+ "email": "daniel@runcommand.io",
+ "homepage": "https://runcommand.io"
}
],
- "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"
- ],
+ "description": "Adds, moves, and removes widgets; lists sidebars.",
+ "homepage": "https://github.com/wp-cli/widget-command",
"support": {
- "source": "https://github.com/symfony/string/tree/v5.4.47"
+ "issues": "https://github.com/wp-cli/widget-command/issues",
+ "source": "https://github.com/wp-cli/widget-command/tree/v2.1.12"
},
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-10T20:33:58+00:00"
+ "time": "2025-04-11T09:29:37+00:00"
},
{
- "name": "szepeviktor/phpstan-wordpress",
- "version": "v2.0.1",
+ "name": "wp-cli/wp-cli",
+ "version": "v2.12.0",
"source": {
"type": "git",
- "url": "https://github.com/szepeviktor/phpstan-wordpress.git",
- "reference": "f7beb13cd22998e3d913fdb897a1e2553ccd637e"
+ "url": "https://github.com/wp-cli/wp-cli.git",
+ "reference": "03d30d4138d12b4bffd8b507b82e56e129e0523f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/f7beb13cd22998e3d913fdb897a1e2553ccd637e",
- "reference": "f7beb13cd22998e3d913fdb897a1e2553ccd637e",
+ "url": "https://api.github.com/repos/wp-cli/wp-cli/zipball/03d30d4138d12b4bffd8b507b82e56e129e0523f",
+ "reference": "03d30d4138d12b4bffd8b507b82e56e129e0523f",
"shasum": ""
},
"require": {
- "php": "^7.4 || ^8.0",
- "php-stubs/wordpress-stubs": "^6.6.2",
- "phpstan/phpstan": "^2.0"
+ "ext-curl": "*",
+ "php": "^5.6 || ^7.0 || ^8.0",
+ "symfony/finder": ">2.7",
+ "wp-cli/mustache": "^2.14.99",
+ "wp-cli/mustangostang-spyc": "^0.6.3",
+ "wp-cli/php-cli-tools": "~0.12.4"
},
"require-dev": {
- "composer/composer": "^2.1.14",
- "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
- "php-parallel-lint/php-parallel-lint": "^1.1",
- "phpstan/phpstan-strict-rules": "^2.0",
- "phpunit/phpunit": "^9.0",
- "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.0",
- "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
+ "wp-cli/db-command": "^1.3 || ^2",
+ "wp-cli/entity-command": "^1.2 || ^2",
+ "wp-cli/extension-command": "^1.1 || ^2",
+ "wp-cli/package-command": "^1 || ^2",
+ "wp-cli/wp-cli-tests": "^4.3.10"
},
"suggest": {
- "swissspidy/phpstan-no-private": "Detect usage of internal core functions, classes and methods"
+ "ext-readline": "Include for a better --prompt implementation",
+ "ext-zip": "Needed to support extraction of ZIP archives when doing downloads or updates"
},
- "type": "phpstan-extension",
+ "bin": [
+ "bin/wp",
+ "bin/wp.bat"
+ ],
+ "type": "library",
"extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
+ "branch-alias": {
+ "dev-main": "2.12.x-dev"
}
},
"autoload": {
- "psr-4": {
- "SzepeViktor\\PHPStan\\WordPress\\": "src/"
- }
+ "psr-0": {
+ "WP_CLI\\": "php/"
+ },
+ "classmap": [
+ "php/class-wp-cli.php",
+ "php/class-wp-cli-command.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "description": "WordPress extensions for PHPStan",
+ "description": "WP-CLI framework",
+ "homepage": "https://wp-cli.org",
"keywords": [
- "PHPStan",
- "code analyse",
- "code analysis",
- "static analysis",
+ "cli",
"wordpress"
],
"support": {
- "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
- "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v2.0.1"
+ "docs": "https://make.wordpress.org/cli/handbook/",
+ "issues": "https://github.com/wp-cli/wp-cli/issues",
+ "source": "https://github.com/wp-cli/wp-cli"
},
- "time": "2024-12-01T02:13:05+00:00"
+ "time": "2025-05-07T01:16:12+00:00"
},
{
- "name": "vimeo/psalm",
- "version": "5.26.1",
+ "name": "wp-cli/wp-cli-bundle",
+ "version": "v2.12.0",
"source": {
"type": "git",
- "url": "https://github.com/vimeo/psalm.git",
- "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0"
+ "url": "https://github.com/wp-cli/wp-cli-bundle.git",
+ "reference": "d639a3dab65f4b935b21c61ea3662bf3258a03a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
- "reference": "d747f6500b38ac4f7dfc5edbcae6e4b637d7add0",
+ "url": "https://api.github.com/repos/wp-cli/wp-cli-bundle/zipball/d639a3dab65f4b935b21c61ea3662bf3258a03a5",
+ "reference": "d639a3dab65f4b935b21c61ea3662bf3258a03a5",
"shasum": ""
},
"require": {
- "amphp/amp": "^2.4.2",
- "amphp/byte-stream": "^1.5",
- "composer-runtime-api": "^2",
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "composer/xdebug-handler": "^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.1",
- "felixfbecker/language-server-protocol": "^1.5.2",
- "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1 || ^1.0.0",
- "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
- "nikic/php-parser": "^4.17",
- "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0",
- "sebastian/diff": "^4.0 || ^5.0 || ^6.0",
- "spatie/array-to-xml": "^2.17.0 || ^3.0",
- "symfony/console": "^4.1.6 || ^5.0 || ^6.0 || ^7.0",
- "symfony/filesystem": "^5.4 || ^6.0 || ^7.0"
- },
- "conflict": {
- "nikic/php-parser": "4.17.0"
- },
- "provide": {
- "psalm/psalm": "self.version"
+ "php": ">=5.6",
+ "wp-cli/cache-command": "^2",
+ "wp-cli/checksum-command": "^2.1",
+ "wp-cli/config-command": "^2.1",
+ "wp-cli/core-command": "^2.1",
+ "wp-cli/cron-command": "^2",
+ "wp-cli/db-command": "^2",
+ "wp-cli/embed-command": "^2",
+ "wp-cli/entity-command": "^2",
+ "wp-cli/eval-command": "^2",
+ "wp-cli/export-command": "^2",
+ "wp-cli/extension-command": "^2.1",
+ "wp-cli/i18n-command": "^2",
+ "wp-cli/import-command": "^2",
+ "wp-cli/language-command": "^2",
+ "wp-cli/maintenance-mode-command": "^2",
+ "wp-cli/media-command": "^2",
+ "wp-cli/package-command": "^2.1",
+ "wp-cli/process": "5.9.99",
+ "wp-cli/rewrite-command": "^2",
+ "wp-cli/role-command": "^2",
+ "wp-cli/scaffold-command": "^2",
+ "wp-cli/search-replace-command": "^2",
+ "wp-cli/server-command": "^2",
+ "wp-cli/shell-command": "^2",
+ "wp-cli/super-admin-command": "^2",
+ "wp-cli/widget-command": "^2",
+ "wp-cli/wp-cli": "^2.12"
},
"require-dev": {
- "amphp/phpunit-util": "^2.0",
- "bamarni/composer-bin-plugin": "^1.4",
- "brianium/paratest": "^6.9",
- "ext-curl": "*",
- "mockery/mockery": "^1.5",
- "nunomaduro/mock-final-classes": "^1.1",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpstan/phpdoc-parser": "^1.6",
- "phpunit/phpunit": "^9.6",
- "psalm/plugin-mockery": "^1.1",
- "psalm/plugin-phpunit": "^0.18",
- "slevomat/coding-standard": "^8.4",
- "squizlabs/php_codesniffer": "^3.6",
- "symfony/process": "^4.4 || ^5.0 || ^6.0 || ^7.0"
+ "roave/security-advisories": "dev-latest",
+ "wp-cli/wp-cli-tests": "^4"
},
"suggest": {
- "ext-curl": "In order to send data to shepherd",
- "ext-igbinary": "^2.0.5 is required, used to serialize caching data"
+ "psy/psysh": "Enhanced `wp shell` functionality"
},
- "bin": [
- "psalm",
- "psalm-language-server",
- "psalm-plugin",
- "psalm-refactor",
- "psalter"
- ],
- "type": "project",
+ "type": "library",
"extra": {
"branch-alias": {
- "dev-1.x": "1.x-dev",
- "dev-2.x": "2.x-dev",
- "dev-3.x": "3.x-dev",
- "dev-4.x": "4.x-dev",
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psalm\\": "src/Psalm/"
+ "dev-main": "2.12.x-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
- "authors": [
- {
- "name": "Matthew Brown"
- }
- ],
- "description": "A static analysis tool for finding errors in PHP applications",
+ "description": "WP-CLI bundle package with default commands.",
+ "homepage": "https://wp-cli.org",
"keywords": [
- "code",
- "inspection",
- "php",
- "static analysis"
+ "cli",
+ "wordpress"
],
"support": {
- "docs": "https://psalm.dev/docs",
- "issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm"
+ "docs": "https://make.wordpress.org/cli/handbook/",
+ "issues": "https://github.com/wp-cli/wp-cli-bundle/issues",
+ "source": "https://github.com/wp-cli/wp-cli-bundle"
},
- "time": "2024-09-08T18:53:08+00:00"
+ "time": "2025-05-07T02:15:53+00:00"
},
{
- "name": "webmozart/assert",
- "version": "1.11.0",
+ "name": "wp-cli/wp-config-transformer",
+ "version": "v1.4.2",
"source": {
"type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991"
+ "url": "https://github.com/wp-cli/wp-config-transformer.git",
+ "reference": "b78cab1159b43eb5ee097e2cfafe5eab573d2a8a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991",
- "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991",
+ "url": "https://api.github.com/repos/wp-cli/wp-config-transformer/zipball/b78cab1159b43eb5ee097e2cfafe5eab573d2a8a",
+ "reference": "b78cab1159b43eb5ee097e2cfafe5eab573d2a8a",
"shasum": ""
},
"require": {
- "ext-ctype": "*",
- "php": "^7.2 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<4.6.1 || 4.6.2"
+ "php": "^5.6 || ^7.0 || ^8.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.5.13"
+ "wp-cli/wp-cli-tests": "^4.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.10-dev"
+ "dev-main": "1.x-dev"
}
},
"autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
+ "files": [
+ "src/WPConfigTransformer.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -3346,21 +10884,17 @@
],
"authors": [
{
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
+ "name": "Frankie Jarrett",
+ "email": "fjarrett@gmail.com"
}
],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
+ "description": "Programmatically edit a wp-config.php file.",
+ "homepage": "https://github.com/wp-cli/wp-config-transformer",
"support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.11.0"
+ "issues": "https://github.com/wp-cli/wp-config-transformer/issues",
+ "source": "https://github.com/wp-cli/wp-config-transformer/tree/v1.4.2"
},
- "time": "2022-06-03T18:03:27+00:00"
+ "time": "2025-03-31T08:37:05+00:00"
},
{
"name": "wp-coding-standards/wpcs",
@@ -3428,6 +10962,75 @@
],
"time": "2024-03-25T16:39:00+00:00"
},
+ {
+ "name": "wp-graphql/wp-graphql-testcase",
+ "version": "v3.4.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/wp-graphql/wp-graphql-testcase.git",
+ "reference": "572d4c51e9a0a33ec1b99970155fe005f468f4ec"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/wp-graphql/wp-graphql-testcase/zipball/572d4c51e9a0a33ec1b99970155fe005f468f4ec",
+ "reference": "572d4c51e9a0a33ec1b99970155fe005f468f4ec",
+ "shasum": ""
+ },
+ "require": {
+ "php-extended/polyfill-php80-str-utils": "^1.3"
+ },
+ "require-dev": {
+ "automattic/vipwpcs": "^2.3",
+ "composer/installers": "^1.9",
+ "johnpbloch/wordpress": "^6.1",
+ "php-coveralls/php-coveralls": "2.4.3",
+ "squizlabs/php_codesniffer": "^3.5",
+ "wp-coding-standards/wpcs": "^2.3",
+ "wpackagist-plugin/wp-graphql": "^1.26"
+ },
+ "suggest": {
+ "codeception/module-asserts": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLTestcase to work.",
+ "codeception/util-universalframework": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLTestcase to work.",
+ "guzzlehttp/guzzle": "Needed for \\Tests\\WPGraphQL\\Codeception\\Module\\WPGraphQL to work.",
+ "lucatume/wp-browser": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLTestcase to work.",
+ "phpunit/phpunit": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLUnitTestcase to work.",
+ "wp-phpunit/wp-phpunit": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLUnitTestcase to work.",
+ "yoast/phpunit-polyfills": "Needed for \\Tests\\WPGraphQL\\TestCase\\WPGraphQLUnitTestcase to work."
+ },
+ "type": "library",
+ "extra": {
+ "installer-paths": {
+ "local/public/wp-content/plugins/{$name}/": [
+ "type:wordpress-plugin"
+ ]
+ },
+ "wordpress-install-dir": "local/public"
+ },
+ "autoload": {
+ "psr-4": {
+ "Tests\\WPGraphQL\\": "src/"
+ },
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Geoff Taylor",
+ "email": "geoffrey.taylor@outlook.com"
+ }
+ ],
+ "description": "Codeception module for WPGraphQL API testing",
+ "support": {
+ "issues": "https://github.com/wp-graphql/wp-graphql-testcase/issues",
+ "source": "https://github.com/wp-graphql/wp-graphql-testcase/tree/v3.4.0"
+ },
+ "time": "2024-08-08T18:48:14+00:00"
+ },
{
"name": "wp-hooks/wordpress-core",
"version": "1.10.0",
@@ -3511,9 +11114,18 @@
"time": "2025-04-16T22:20:41+00:00"
}
],
- "aliases": [],
+ "aliases": [
+ {
+ "package": "phpcompatibility/php-compatibility",
+ "version": "dev-develop",
+ "alias": "9.99.99",
+ "alias_normalized": "9.99.99.0"
+ }
+ ],
"minimum-stability": "dev",
- "stability-flags": {},
+ "stability-flags": {
+ "phpcompatibility/php-compatibility": 20
+ },
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
diff --git a/plugins/hwp-previews/docker-compose.yml b/plugins/hwp-previews/docker-compose.yml
new file mode 100644
index 00000000..5379b859
--- /dev/null
+++ b/plugins/hwp-previews/docker-compose.yml
@@ -0,0 +1,47 @@
+services:
+ wordpress:
+ build:
+ context: ./.docker
+ args:
+ WP_VERSION: ${WP_VERSION}
+ PHP_VERSION: ${PHP_VERSION}
+ image: ${PLUGIN_SLUG}:latest-wp${WP_VERSION}-php${PHP_VERSION}
+ restart: always
+ ports:
+ - "8890:80"
+ environment:
+ WP_VERSION: ${WP_VERSION}
+ PHP_VERSION: ${PHP_VERSION}
+ env_file:
+ - .env
+ user: root
+ depends_on:
+ - mysql
+ volumes:
+ - wordpress_data:/var/www/html
+ - ./:/var/www/html/wp-content/plugins/${PLUGIN_SLUG}
+ networks:
+ - plugin_network
+
+ mysql:
+ image: mariadb:10
+ restart: always
+ ports:
+ - '3306:3306'
+ environment:
+ MYSQL_ROOT_PASSWORD: ${WORDPRESS_DB_PASSWORD}
+ MYSQL_USER: ${WORDPRESS_DB_USER}
+ MYSQL_PASSWORD: ${WORDPRESS_DB_PASSWORD}
+ MYSQL_DATABASE: ${WORDPRESS_DB_NAME}
+ volumes:
+ - db:/var/lib/mysql
+ networks:
+ - plugin_network
+
+networks:
+ plugin_network:
+ driver: bridge
+
+volumes:
+ wordpress_data:
+ db:
diff --git a/plugins/hwp-previews/hwp-previews.php b/plugins/hwp-previews/hwp-previews.php
index f1a428e8..1b332cb3 100644
--- a/plugins/hwp-previews/hwp-previews.php
+++ b/plugins/hwp-previews/hwp-previews.php
@@ -48,25 +48,41 @@
/**
* Define plugin constants.
+ *
+ * phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh
+ * phpcs:disable SlevomatCodingStandard.Complexity.Cognitive.ComplexityTooHigh
*/
function hwp_previews_constants(): void {
- $constants = [
- 'HWP_PREVIEWS_VERSION' => '0.0.1',
- 'HWP_PREVIEWS_PLUGIN_DIR' => plugin_dir_path( __FILE__ ),
- 'HWP_PREVIEWS_PLUGIN_URL' => plugin_dir_url( __FILE__ ),
- 'HWP_PREVIEWS_PLUGIN_FILE' => __FILE__,
- 'HWP_PREVIEWS_AUTOLOAD' => true,
- 'HWP_PREVIEWS_SETTINGS_GROUP' => 'hwp_previews_settings_group',
- 'HWP_PREVIEWS_SETTINGS_KEY' => 'hwp_previews_settings',
- 'HWP_PREVIEWS_TEXT_DOMAIN' => 'hwp-previews',
- ];
-
- foreach ( $constants as $name => $value ) {
- if ( ! defined( $name ) ) {
- // phpcs:disable WordPress.NamingConventions.PrefixAllGlobals.VariableConstantNameFound
- define( $name, $value );
- // phpcs:enable WordPress.NamingConventions.PrefixAllGlobals.VariableConstantNameFound
- }
+ if ( ! defined( 'HWP_PREVIEWS_VERSION' ) ) {
+ define( 'HWP_PREVIEWS_VERSION', '0.0.1' );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_PLUGIN_DIR' ) ) {
+ define( 'HWP_PREVIEWS_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_PLUGIN_URL' ) ) {
+ define( 'HWP_PREVIEWS_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_PLUGIN_FILE' ) ) {
+ define( 'HWP_PREVIEWS_PLUGIN_FILE', __FILE__ );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_AUTOLOAD' ) ) {
+ define( 'HWP_PREVIEWS_AUTOLOAD', true );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_SETTINGS_GROUP' ) ) {
+ define( 'HWP_PREVIEWS_SETTINGS_GROUP', 'hwp_previews_settings_group' );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_SETTINGS_KEY' ) ) {
+ define( 'HWP_PREVIEWS_SETTINGS_KEY', 'hwp_previews_settings' );
+ }
+
+ if ( ! defined( 'HWP_PREVIEWS_TEXT_DOMAIN' ) ) {
+ define( 'HWP_PREVIEWS_TEXT_DOMAIN', 'hwp-previews' );
}
// Plugin Template Directory.
@@ -75,6 +91,9 @@ function hwp_previews_constants(): void {
}
}
+// phpcs:enable Generic.Metrics.CyclomaticComplexity.TooHigh
+// phpcs:enable SlevomatCodingStandard.Complexity.Cognitive.ComplexityTooHigh
+
/**
* Initializes plugin.
*/
diff --git a/plugins/hwp-previews/phpcs.xml b/plugins/hwp-previews/phpcs.xml
index 8adbb71a..0b2d2b05 100644
--- a/plugins/hwp-previews/phpcs.xml
+++ b/plugins/hwp-previews/phpcs.xml
@@ -7,6 +7,8 @@
Coding standards for the HWP Previews plugin
./hwp-previews.php
+ ./activation.php
+ ./deactivation.php
./vendor/autoload.php
./src/
*/languages/*
diff --git a/plugins/hwp-previews/src/Admin/Settings/Contracts/Menu_Page_Interface.php b/plugins/hwp-previews/src/Admin/Settings/Contracts/Menu_Page_Interface.php
deleted file mode 100644
index 3761bcbf..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Contracts/Menu_Page_Interface.php
+++ /dev/null
@@ -1,17 +0,0 @@
- $default_value Default post types.
- *
- * @return array
- */
- public function post_types_enabled( array $default_value = [] ): array;
-
- /**
- * Gets URL template for the given post type.
- *
- * @param string $post_type Post type slug.
- * @param string $default_value Default URL template.
- */
- public function url_template( string $post_type, string $default_value = '' ): string;
-
- /**
- * It the specified post statuses should be allowed to be used as parent post statuses.
- *
- * @param string $post_type Post type slug.
- * @param bool $default_value Default value.
- */
- public function post_statuses_as_parent( string $post_type, bool $default_value = false ): bool;
-
- /**
- * If the post type preview supposed to be opened in iframe on WP Admin side.
- *
- * @param string $post_type Post type slug.
- * @param bool $default_value Default value.
- */
- public function in_iframe( string $post_type, bool $default_value = false ): bool;
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Abstract_Settings_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Abstract_Settings_Field.php
deleted file mode 100644
index 79657d74..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Fields/Abstract_Settings_Field.php
+++ /dev/null
@@ -1,162 +0,0 @@
- $option_value Settings value.
- * @param string $setting_key The settings key.
- * @param string $post_type The post type.
- */
- abstract protected function render_field( array $option_value, string $setting_key, string $post_type ): void;
-
- /**
- * Constructor.
- *
- * @param string $id The settings field ID.
- * @param string $title The settings field title.
- * @param string $css_class The settings field class.
- */
- public function __construct(
- string $id,
- string $title,
- string $css_class = '',
- string $description = ''
- ) {
- $this->id = $id;
- $this->title = $title;
- $this->class = $css_class;
- $this->description = $description;
- }
-
- /**
- * Set the settings key.
- *
- * @param string $settings_key The settings key.
- *
- * @return $this
- */
- public function set_settings_key( string $settings_key ): self {
- $this->settings_key = $settings_key;
-
- return $this;
- }
-
- /**
- * Set the post type.
- *
- * @param string $post_type The post type.
- *
- * @return $this
- */
- public function set_post_type( string $post_type ): self {
- $this->post_type = $post_type;
-
- return $this;
- }
-
- /**
- * Register the settings field.
- *
- * @param string $section The settings section.
- * @param string $page The settings page.
- */
- public function register_settings_field( string $section, string $page ): void {
-
- add_settings_field(
- $this->id,
- $this->title,
- [ $this, 'settings_field_callback' ],
- $page,
- $section
- );
- }
-
- /**
- * Callback for the settings field.
- */
- public function settings_field_callback(): void {
- printf(
- '
-
- %1$s
-
',
- esc_attr( $this->description ),
- esc_attr( $this->settings_key )
- );
-
- $this->render_field(
- $this->get_setting_value( $this->settings_key, $this->post_type ),
- $this->settings_key,
- $this->post_type
- );
- }
-
- /**
- * Get the settings value.
- *
- * @param string $settings_key The settings key.
- * @param string $post_type The post type.
- *
- * @return array
- */
- private function get_setting_value( string $settings_key, string $post_type ): array {
- $value = get_option( $settings_key, [] );
-
- if (
- empty( $value ) ||
- ! isset( $value[ $post_type ] ) ||
- ! is_array( $value[ $post_type ] )
- ) {
- return [];
- }
-
- return $value[ $post_type ];
- }
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Abstract_Settings_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Abstract_Settings_Field.php
new file mode 100644
index 00000000..a594eeb1
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Abstract_Settings_Field.php
@@ -0,0 +1,182 @@
+id = $id;
+ $this->is_hierarchical = $is_hierarchical;
+ $this->title = $title;
+ $this->class = $css_class;
+ $this->description = $description;
+ }
+
+ /**
+ * Get the settings field ID.
+ */
+ public function get_id(): string {
+ return $this->id;
+ }
+
+ /**
+ * Where the field is hierarchical or not.
+ */
+ public function is_hierarchical(): bool {
+ return $this->is_hierarchical;
+ }
+
+ /**
+ * Get the settings field title.
+ */
+ public function get_title(): string {
+ return $this->title;
+ }
+
+ /**
+ * Get the description field.
+ */
+ public function get_description(): string {
+ return $this->description;
+ }
+
+ /**
+ * Register the settings field.
+ *
+ * @param string $section The settings section.
+ * @param string $page The settings page.
+ * @param array $args The arguments for the settings field.
+ *
+ * @psalm-suppress ArgumentTypeCoercion
+ */
+ public function add_settings_field( string $section, string $page, array $args ): void {
+ add_settings_field(
+ $this->id,
+ $this->get_title(),
+ [ $this, 'settings_field_callback' ],
+ $page,
+ $section,
+ $args
+ );
+ }
+
+ /**
+ * Callback for the settings field.
+ *
+ * @param array $args The arguments for the settings field.
+ */
+ public function settings_field_callback( array $args ): void {
+
+ $post_type = $args['post_type'] ?? 'post';
+ $settings_key = $args['settings_key'] ?? HWP_PREVIEWS_SETTINGS_KEY;
+
+ printf(
+ '
+
+ %1$s
+
',
+ esc_attr( $this->get_description() ),
+ esc_attr( $settings_key )
+ );
+
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ echo $this->render_field(
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ $this->get_setting_value( $settings_key, $post_type ),
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ $settings_key,
+ // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
+ $post_type,
+ );
+ }
+
+ /**
+ * Whethere to render the field or not based on the post-type hierarchy.
+ *
+ * @param bool $post_type_hierarchal
+ */
+ public function should_render_field( bool $post_type_hierarchal ): bool {
+
+ // If the post-type is hierarchical, then we always render the field as we don't need to check the field hierarchy.
+ if ( true === $post_type_hierarchal ) {
+ return true;
+ }
+
+ return ! $this->is_hierarchical();
+ }
+
+ /**
+ * Get the settings value.
+ *
+ * @param string $settings_key The settings key.
+ * @param string $post_type The post type.
+ *
+ * @return array
+ */
+ public function get_setting_value( string $settings_key, string $post_type ): array {
+ $value = get_option( $settings_key, [] );
+
+ if (
+ empty( $value ) ||
+ ! isset( $value[ $post_type ] ) ||
+ ! is_array( $value[ $post_type ] )
+ ) {
+ return [];
+ }
+
+ return $value[ $post_type ];
+ }
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Checkbox_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Checkbox_Field.php
similarity index 54%
rename from plugins/hwp-previews/src/Admin/Settings/Fields/Checkbox_Field.php
rename to plugins/hwp-previews/src/Admin/Settings/Fields/Field/Checkbox_Field.php
index 786a4d26..a2705d2a 100644
--- a/plugins/hwp-previews/src/Admin/Settings/Fields/Checkbox_Field.php
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Checkbox_Field.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace HWP\Previews\Admin\Settings\Fields;
+namespace HWP\Previews\Admin\Settings\Fields\Field;
class Checkbox_Field extends Abstract_Settings_Field {
/**
@@ -10,19 +10,20 @@ class Checkbox_Field extends Abstract_Settings_Field {
*
* @var bool
*/
- private bool $default;
+ protected bool $default;
/**
* Constructor.
*
* @param string $id The settings field ID.
+ * @param bool $is_hierarchical Whether the field is hierarchical.
* @param string $title The settings field title.
* @param string $description The settings field description.
* @param bool $default_value The default value for the field.
* @param string $css_class The settings field class.
*/
- public function __construct( string $id, string $title, string $description = '', bool $default_value = false, string $css_class = '' ) {
- parent::__construct( $id, $title, $css_class, $description );
+ public function __construct( string $id, bool $is_hierarchical, string $title, string $description = '', bool $default_value = false, string $css_class = '' ) {
+ parent::__construct( $id, $is_hierarchical, $title, $css_class, $description );
$this->default = $default_value;
}
@@ -30,16 +31,16 @@ public function __construct( string $id, string $title, string $description = ''
/**
* Render the checkbox settings field.
*
- * @param array $option_value Settings value.
- * @param string $setting_key The settings key.
- * @param string $post_type The post type.
+ * @param array $option_value Settings value.
+ * @param string $setting_key The settings key.
+ * @param string $post_type The post type.
*/
- protected function render_field( $option_value, $setting_key, $post_type ): void {
+ public function render_field( $option_value, $setting_key, $post_type ): string {
$enabled = isset( $option_value[ $this->id ] )
? (bool) $option_value[ $this->id ]
: $this->default;
- printf(
+ return sprintf(
'',
esc_attr( $setting_key ),
esc_attr( $post_type ),
@@ -48,4 +49,11 @@ protected function render_field( $option_value, $setting_key, $post_type ): void
sanitize_html_class( $this->class )
);
}
+
+ /**
+ * @param mixed $value
+ */
+ public function sanitize_field( $value ): bool {
+ return ! empty( $value );
+ }
}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Text_Input_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Text_Input_Field.php
new file mode 100644
index 00000000..c4ec3ca7
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/Text_Input_Field.php
@@ -0,0 +1,91 @@
+default = $default_value;
+ }
+
+ /**
+ * Render the field.
+ *
+ * @param array $option_value The value of the field.
+ * @param string $setting_key The settings key.
+ * @param string $post_type The post type.
+ */
+ public function render_field( array $option_value, string $setting_key, string $post_type ): string {
+
+ $default_value = $this->default;
+ if ( ! empty( $default_value ) && str_contains( $default_value, '%s' ) ) {
+ $default_value = sprintf( $default_value, $post_type );
+ }
+
+ // Get option value for the current post type.
+ $option_escaped_value = null;
+ if ( array_key_exists( $this->get_id(), $option_value ) ) {
+ $option_escaped_value = $option_value[ $this->get_id() ];
+ if ( str_contains( $option_escaped_value, '%s' ) ) {
+ $option_escaped_value = sprintf( $option_escaped_value, $post_type );
+ }
+ }
+
+
+ return sprintf(
+ '',
+ $this->get_input_type(),
+ esc_attr( $setting_key ),
+ esc_attr( $post_type ),
+ esc_attr( $this->get_id() ),
+ $this->escape_render_input_value( ( $option_escaped_value ?? $default_value ) ),
+ $this->escape_render_input_value( $default_value ),
+ esc_attr( $this->class )
+ );
+ }
+
+ /**
+ * @param mixed $value
+ */
+ public function sanitize_field( $value ): string {
+ return sanitize_text_field( (string) $value );
+ }
+
+ /**
+ * Get the input type for the field.
+ *
+ * @return string The input type.
+ */
+ public function get_input_type(): string {
+ return 'text';
+ }
+
+ /**
+ * Escape the value for rendering in the input field.
+ *
+ * @param string $value
+ */
+ protected function escape_render_input_value(string $value): string {
+ return esc_attr( $value );
+ }
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Field/URL_Input_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/URL_Input_Field.php
new file mode 100644
index 00000000..f9b15b89
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Field/URL_Input_Field.php
@@ -0,0 +1,61 @@
+fix_url( $value );
+
+ // Sanitize while preserving placeholders.
+ $value = str_replace( [ '{', '}' ], [ '___OPEN___', '___CLOSE___' ], $value );
+ $value = esc_url_raw( $value );
+ return str_replace( [ '___OPEN___', '___CLOSE___' ], [ '{', '}' ], $value );
+ }
+
+ /**
+ * URL input field constructor.
+ *
+ * Note: We did not change escape_render_input_value method to esc_url as this would remove any brackets from the URL.
+ */
+ public function get_input_type(): string {
+ return 'url';
+ }
+
+ /**
+ * Fixes the URL by removing HTML tags, trimming whitespace, encoding spaces, and adding a protocol if missing.
+ *
+ * @param string $value
+ */
+ private function fix_url( string $value ): string {
+ // Remove HTML tags, trim, encode spaces, add protocol.
+ $value = preg_replace( '/<(?!\{)[^>]+>/', '', $value );
+ $value = trim( str_replace( ' ', '%20', (string) $value ) );
+
+ if ( '' === $value ) {
+ return '';
+ }
+
+ $has_prootocol = preg_match( '/^https?:\/\//i', $value ) === 1;
+ if ( $has_prootocol ) {
+ return $value;
+ }
+ $protocol = is_ssl() ? 'https://' : 'http://';
+ return $protocol . ltrim( $value, '/' );
+ }
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Collection.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Collection.php
new file mode 100644
index 00000000..c4a43357
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Collection.php
@@ -0,0 +1,108 @@
+
+ */
+ protected $fields = [];
+
+ /**
+ * Constructor to initialize the fields.
+ */
+ public function __construct() {
+ $this->initialize_fields();
+ }
+
+ /**
+ * @return array<\HWP\Previews\Admin\Settings\Fields\Settings_Field_Interface>
+ */
+ public function get_fields(): array {
+ return $this->fields;
+ }
+
+ /**
+ * Get a specific field by its key.
+ *
+ * @param string $key The key of the field to retrieve.
+ *
+ * @return \HWP\Previews\Admin\Settings\Fields\Settings_Field_Interface|null The field if found, null otherwise.
+ */
+ public function get_field( string $key ): ?Settings_Field_Interface {
+ return $this->fields[ $key ] ?? null;
+ }
+
+ /**
+ * Add a field to the collection.
+ *
+ * @param \HWP\Previews\Admin\Settings\Fields\Settings_Field_Interface $field The field to add.
+ */
+ public function add_field( Settings_Field_Interface $field ): void {
+ $key = $field->get_id();
+ $this->fields[ $key ] = $field;
+ }
+
+ /**
+ * Remove a field from the collection by its key.
+ *
+ * @param string $key The key of the field to remove.
+ */
+ public function remove_field( string $key ): void {
+ unset( $this->fields[ $key ] );
+ }
+
+ /**
+ * Initialize the fields for the settings.
+ */
+ protected function initialize_fields(): void {
+
+ $this->add_field(
+ new Checkbox_Field(
+ 'enabled',
+ false,
+ __( 'Enable Previews', 'hwp-previews' ),
+ __( 'Enable previews for post type.', 'hwp-previews' )
+ )
+ );
+
+ $this->add_field(
+ new Checkbox_Field(
+ 'post_statuses_as_parent',
+ true,
+ __( 'Allow all post statuses in parents option', 'hwp-previews' ),
+ __( 'By default WordPress only allows published posts to be parents. This option allows posts of all statuses to be used as parent within hierarchical post types.', 'hwp-previews' )
+ )
+ );
+
+ $this->add_field(
+ new Checkbox_Field(
+ 'in_iframe',
+ false,
+ __( 'Use iframe to render previews', 'hwp-previews' ),
+ __( 'With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.', 'hwp-previews' )
+ )
+ );
+
+ $this->add_field(
+ new URL_Input_Field(
+ 'preview_url',
+ false,
+ __( 'Preview URL', 'hwp-previews' ),
+ __( 'Construct your preview URL using the tags on the right. You can add any parameters needed to support headless previews.', 'hwp-previews' ),
+ 'https://localhost:3000/%s?preview=true&post_id={ID}&name={slug}',
+ 'code hwp-previews-url' // The class is being used as a query for the JS.
+ )
+ );
+
+ // Allow other plugins to add their own fields.
+ apply_filters( 'hwp_previews_settings_fields', $this );
+ }
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Interface.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Interface.php
new file mode 100644
index 00000000..c42dc1e0
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Fields/Settings_Field_Interface.php
@@ -0,0 +1,49 @@
+ $option_value The option value.
+ * @param string $setting_key The setting key.
+ * @param string $post_type The post-type.
+ */
+ public function render_field( array $option_value, string $setting_key, string $post_type ): string;
+
+ /**
+ * Get the field ID
+ */
+ public function get_id(): string;
+
+ /**
+ * Whether the field should be rendered for hierarchical post types
+ */
+ public function is_hierarchical(): bool;
+
+ /**
+ * Whether the field should be rendered for hierarchical post-type
+ */
+ public function should_render_field( bool $post_type_hierarchal ): bool;
+
+ /**
+ * Add the settings field
+ *
+ * @param string $section The section ID.
+ * @param string $page The page ID.
+ * @param array $args The field arguments.
+ */
+ public function add_settings_field( string $section, string $page, array $args ): void;
+
+ /**
+ * Sanitize field value
+ *
+ * @param mixed $value
+ *
+ * @return mixed
+ */
+ public function sanitize_field( $value );
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Fields/Text_Input_Field.php b/plugins/hwp-previews/src/Admin/Settings/Fields/Text_Input_Field.php
deleted file mode 100644
index 4be75df4..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Fields/Text_Input_Field.php
+++ /dev/null
@@ -1,48 +0,0 @@
-default = $default_value;
- }
-
- /**
- * Render the field.
- *
- * @param array $option_value The value of the field.
- * @param string $setting_key The settings key.
- * @param string $post_type The post type.
- */
- protected function render_field( array $option_value, string $setting_key, string $post_type ): void {
- printf(
- '',
- esc_attr( $setting_key ),
- esc_attr( $post_type ),
- esc_attr( $this->id ),
- esc_attr( (string) ( $option_value[ $this->id ] ?? $this->default ) ),
- esc_attr( $this->default ),
- esc_attr( $this->class )
- );
- }
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Menu/Menu_Page.php b/plugins/hwp-previews/src/Admin/Settings/Menu/Menu_Page.php
index b8167c9f..d23fe0f9 100644
--- a/plugins/hwp-previews/src/Admin/Settings/Menu/Menu_Page.php
+++ b/plugins/hwp-previews/src/Admin/Settings/Menu/Menu_Page.php
@@ -4,9 +4,7 @@
namespace HWP\Previews\Admin\Settings\Menu;
-use HWP\Previews\Admin\Settings\Contracts\Menu_Page_Interface;
-
-class Menu_Page implements Menu_Page_Interface {
+class Menu_Page {
/**
* The title of the page.
*
diff --git a/plugins/hwp-previews/src/Admin/Settings/Menu/Submenu_Page.php b/plugins/hwp-previews/src/Admin/Settings/Menu/Submenu_Page.php
deleted file mode 100644
index 75de0f98..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Menu/Submenu_Page.php
+++ /dev/null
@@ -1,50 +0,0 @@
- $args An array of arguments to be passed to the template.
- */
- public function __construct(
- string $parent_slug,
- string $page_title,
- string $menu_title,
- string $menu_slug,
- string $template,
- array $args = []
- ) {
- $this->parent_slug = $parent_slug;
- parent::__construct( $page_title, $menu_title, $menu_slug, $template, $args );
- }
-
- /**
- * Register the submenu page. Should be called on the 'admin_menu' action.
- */
- public function register_page(): void {
- add_submenu_page(
- $this->parent_slug,
- $this->page_title,
- $this->menu_title,
- 'manage_options',
- $this->menu_slug,
- [ $this, 'registration_callback' ]
- );
- }
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Settings_Form_Manager.php b/plugins/hwp-previews/src/Admin/Settings/Settings_Form_Manager.php
new file mode 100644
index 00000000..52825add
--- /dev/null
+++ b/plugins/hwp-previews/src/Admin/Settings/Settings_Form_Manager.php
@@ -0,0 +1,146 @@
+
+ */
+ protected array $post_types = [];
+
+ /**
+ * Array of fields to be registered in the settings sections.
+ *
+ * @var \HWP\Previews\Admin\Settings\Fields\Settings_Field_Collection
+ */
+ protected Settings_Field_Collection $fields;
+
+ /**
+ * @param array $post_types Array of post types for which settings are registered.
+ * @param \HWP\Previews\Admin\Settings\Fields\Settings_Field_Collection $fields Collection of fields to be registered in the settings sections.
+ */
+ public function __construct( array $post_types, Settings_Field_Collection $fields ) {
+ $this->post_types = $post_types;
+ $this->fields = $fields;
+ }
+
+ /**
+ * Render the settings form for all post-types.
+ *
+ * This method creates tabs for each post-type and renders the settings fields for each post-type.
+ */
+ public function render_form(): void {
+ $this->create_tabs();
+
+ foreach ( $this->post_types as $post_type => $label ) {
+ $this->render_post_type_section( $post_type, $label );
+ }
+ }
+
+ /**
+ * Sanitize and merge new settings per-tab, pruning unknown fields.
+ *
+ * @param array $new_input New settings input for the specific tab that comes from the form for the sanitization.
+ *
+ * @return array
+ */
+ public function sanitize_settings( array $new_input ): array {
+
+ // @TODO - Refactor with Settings Group.
+ $option_name = apply_filters( 'hwp_previews_settings_key', HWP_PREVIEWS_SETTINGS_KEY );
+
+ $old_input = (array) get_option( $option_name, [] );
+
+ // Remove redundant tabs.
+ $post_types = array_keys( $this->post_types );
+ $old_input = array_intersect_key( $old_input, array_flip( $post_types ) );
+
+ $tab = array_keys( $new_input );
+ if ( ! isset( $tab[0] ) ) {
+ return $old_input; // Wrong settings structure.
+ }
+
+ $tab_to_sanitize = (string) $tab[0];
+ if ( ! is_array( $new_input[ $tab_to_sanitize ] ) ) {
+ return $old_input; // Wrong settings structure.
+ }
+
+ // Sanitize the fields in the tab.
+ $sanitized_fields = [];
+ foreach ( $new_input[ $tab_to_sanitize ] as $key => $value ) {
+ $field = $this->fields->get_field( $key );
+ if ( is_null( $field ) ) {
+ continue; // Skip unknown fields.
+ }
+
+ $sanitized_fields[ $key ] = $field->sanitize_field( $value );
+ }
+
+ // Merge the sanitized fields with the old input.
+ $old_input[ $tab_to_sanitize ] = $sanitized_fields;
+
+ return $old_input;
+ }
+
+ /**
+ * Create the settings tabs for the post-types.
+ *
+ * This method registers the settings group and the settings key for the post-types.
+ */
+ protected function create_tabs(): void {
+
+ // @TODO - Refactor with Settings Group.
+ $option_group = apply_filters( 'hwp_previews_settings_group', HWP_PREVIEWS_SETTINGS_GROUP );
+ $option_name = apply_filters( 'hwp_previews_settings_key', HWP_PREVIEWS_SETTINGS_KEY );
+
+ register_setting(
+ $option_group,
+ $option_name,
+ [
+ 'sanitize_callback' => [ $this, 'sanitize_settings' ],
+ 'type' => 'array',
+ 'default' => [],
+ ]
+ );
+ }
+
+ /**
+ * Render the settings section for a specific post-type.
+ *
+ * This method creates a settings section for the given post-type and renders the fields for that section.
+ *
+ * @param string $post_type The post type slug.
+ * @param string $label The label for the post type section.
+ */
+ protected function render_post_type_section( string $post_type, string $label ): void {
+ $fields = $this->fields->get_fields();
+ $page_id = 'hwp_previews_section_' . $post_type;
+ $page_uri = 'hwp-previews-' . $post_type;
+ $is_hierarchical = is_post_type_hierarchical( $post_type );
+
+ add_settings_section( $page_id, $label, static fn() => null, $page_uri );
+
+ /** @var \HWP\Previews\Admin\Settings\Fields\Settings_Field_Interface $field */
+ foreach ( $fields as $field ) {
+ if ( ! $field->should_render_field( $is_hierarchical ) ) {
+ continue;
+ }
+
+ $field->add_settings_field(
+ $page_id,
+ $page_uri,
+ [
+ 'post_type' => $post_type,
+ 'label' => $label,
+ 'settings_key' => HWP_PREVIEWS_SETTINGS_KEY,
+ ]
+ );
+ }
+ }
+}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Settings_Section.php b/plugins/hwp-previews/src/Admin/Settings/Settings_Section.php
deleted file mode 100644
index 41f49897..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Settings_Section.php
+++ /dev/null
@@ -1,78 +0,0 @@
-
- */
- private array $fields;
-
- /**
- * Constructor.
- *
- * @param string $id Page slug.
- * @param string $title Settings section title.
- * @param string $page The slug of the settings page.
- * @param array<\HWP\Previews\Admin\Settings\Fields\Abstract_Settings_Field> $fields Array of fields to be registered in the section.
- */
- public function __construct(
- string $id,
- string $title,
- string $page,
- array $fields
- ) {
- $this->id = $id;
- $this->title = $title;
- $this->page = $page;
- $this->fields = $fields;
- }
-
- /**
- * Register the settings section.
- *
- * @param string $settings_key The settings key.
- * @param string $post_type The post type.
- * @param string $page The page slug.
- */
- public function register_section( string $settings_key, string $post_type, string $page ): void {
- add_settings_section(
- $this->id,
- $this->title,
- static fn() => null,
- $this->page
- );
-
- foreach ( $this->fields as $field ) {
- $field->set_settings_key( $settings_key );
- $field->set_post_type( $post_type );
-
- $field->register_settings_field( $this->id, $page );
- }
- }
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings/Tabbed_Settings.php b/plugins/hwp-previews/src/Admin/Settings/Tabbed_Settings.php
deleted file mode 100644
index 948530fb..00000000
--- a/plugins/hwp-previews/src/Admin/Settings/Tabbed_Settings.php
+++ /dev/null
@@ -1,131 +0,0 @@
-
- */
- private array $tabs;
-
- /**
- * Array of sanitization options where keys area options and values are types.
- *
- * @var array
- */
- private array $sanitization_options;
-
- /**
- * Constructor.
- *
- * @param string $option_group Settings option group.
- * @param string $option_name Settings option name.
- * @param array $tabs Tabs array as items allowed in the settings.
- * @param array $sanitization_options Array of sanitization options where keys are options and values are types.
- */
- public function __construct(
- string $option_group,
- string $option_name,
- array $tabs,
- array $sanitization_options
- ) {
- $this->option_group = $option_group;
- $this->option_name = $option_name;
- $this->tabs = $tabs;
- $this->sanitization_options = $sanitization_options;
- }
-
- /**
- * Register settings.
- */
- public function register_settings(): void {
- register_setting(
- $this->option_group,
- $this->option_name,
- [
- 'sanitize_callback' => [ $this, 'sanitize_settings' ],
- 'type' => 'array',
- 'default' => [],
- ]
- );
- }
-
- /**
- * Sanitize and merge new settings per-tab, pruning unknown fields.
- *
- * @param array $new_input New settings input for the specific tab that comes from the form for the sanitization.
- *
- * @return array
- */
- public function sanitize_settings( array $new_input ): array {
- $old_input = (array) get_option( $this->option_name, [] );
-
- // Remove redundant tabs.
- $old_input = array_intersect_key( $old_input, array_flip( $this->tabs ) );
-
- $tab = array_keys( $new_input );
- if ( ! isset( $tab[0] ) ) {
- return $old_input; // Wrong settings structure.
- }
-
- $tab_to_sanitize = (string) $tab[0];
- if ( ! is_array( $new_input[ $tab_to_sanitize ] ) ) {
- return $old_input; // Wrong settings structure.
- }
-
- // Sanitize the fields in the tab.
- $sanitized_fields = [];
- foreach ( $new_input[ $tab_to_sanitize ] as $key => $value ) {
- if ( ! isset( $this->sanitization_options[ (string) $key ] ) ) {
- continue;
- }
-
- $sanitized_fields[ $key ] = $this->sanitize_field( (string) $key, $value );
- }
-
- // Merge the sanitized fields with the old input.
- $old_input[ $tab_to_sanitize ] = $sanitized_fields;
-
- return $old_input;
- }
-
- /**
- * Sanitize a single field value by type.
- *
- * @param string $key Field key.
- * @param mixed $value Raw value.
- *
- * @return bool|int|string
- */
- private function sanitize_field( string $key, $value ) {
- $type = $this->sanitization_options[ $key ];
-
- switch ( $type ) {
- case 'bool':
- return ! empty( $value );
- case 'int':
- return intval( $value );
- case 'text':
- default:
- return sanitize_text_field( (string) $value );
- }
- }
-}
diff --git a/plugins/hwp-previews/src/Admin/Settings_Page.php b/plugins/hwp-previews/src/Admin/Settings_Page.php
index 81c58c1e..1d30c54d 100644
--- a/plugins/hwp-previews/src/Admin/Settings_Page.php
+++ b/plugins/hwp-previews/src/Admin/Settings_Page.php
@@ -4,12 +4,9 @@
namespace HWP\Previews\Admin;
-use HWP\Previews\Admin\Settings\Fields\Checkbox_Field;
-use HWP\Previews\Admin\Settings\Fields\Text_Input_Field;
-use HWP\Previews\Admin\Settings\Helper\Settings_Helper;
+use HWP\Previews\Admin\Settings\Fields\Settings_Field_Collection;
use HWP\Previews\Admin\Settings\Menu\Menu_Page;
-use HWP\Previews\Admin\Settings\Settings_Section;
-use HWP\Previews\Admin\Settings\Tabbed_Settings;
+use HWP\Previews\Admin\Settings\Settings_Form_Manager;
use HWP\Previews\Post\Type\Contracts\Post_Types_Config_Interface;
use HWP\Previews\Post\Type\Post_Types_Config_Registry;
use HWP\Previews\Preview\Parameter\Preview_Parameter_Registry;
@@ -21,85 +18,119 @@ class Settings_Page {
public const PLUGIN_MENU_SLUG = 'hwp-previews';
/**
- * @var \HWP\Previews\Preview\Parameter\Preview_Parameter_Registry|null The registry of preview parameters.
+ * @var \HWP\Previews\Preview\Parameter\Preview_Parameter_Registry The registry of preview parameters.
*/
- protected static ?Preview_Parameter_Registry $parameters = null;
+ protected Preview_Parameter_Registry $parameters;
/**
- * @var \HWP\Previews\Post\Type\Contracts\Post_Types_Config_Interface|null The post types available for previews..
+ * @var \HWP\Previews\Post\Type\Contracts\Post_Types_Config_Interface The post types available for previews.
*/
- protected static ?Post_Types_Config_Interface $types_config = null;
+ protected Post_Types_Config_Interface $types_config;
/**
- * Initializes the settings page and registers the necessary properties, configuration and hooks.
+ * The instance of the plugin.
+ *
+ * @var \HWP\Previews\Admin\Settings_Page|null
+ */
+ protected static ?Settings_Page $instance = null;
+
+ /**
+ * Constructor.
+ *
+ * Initializes the settings page, registers settings fields, and loads scripts and styles.
*/
- public static function init(): void {
- self::init_class_properties();
- self::register_settings_pages();
- self::register_settings_fields();
- self::load_scripts_styles();
+ public function __construct() {
+ $this->parameters = Preview_Parameter_Registry::get_instance();
+ $this->types_config = Post_Types_Config_Registry::get_post_type_config();
+
+ $this->register_settings_pages();
+ $this->register_settings_fields();
+ $this->load_scripts_styles();
}
/**
- * Initializes the class properties.
+ * Initializes the settings page.
*/
- public static function init_class_properties(): void {
+ public static function init(): Settings_Page {
+ if ( ! isset( self::$instance ) || ! ( is_a( self::$instance, self::class ) ) ) {
+ self::$instance = new self();
+ }
+
+ /**
+ * Fire off init action.
+ *
+ * @param \HWP\Previews\Admin\Settings_Page $instance the instance of the plugin class.
+ */
+ do_action( 'hwp_previews_init', self::$instance );
- self::$parameters = Preview_Parameter_Registry::get_instance();
- self::$types_config = Post_Types_Config_Registry::get_post_type_config();
+ return self::$instance;
}
/**
* Registers the settings page.
*/
- public static function register_settings_pages(): void {
- add_action( 'admin_menu', static function (): void {
-
- $post_types = ( null === self::$types_config ) ? [] : self::$types_config->get_public_post_types();
-
- /**
- * Array of post types where key is the post type slug and value is the label.
- *
- * @var array $post_types
- */
- $post_types = apply_filters( 'hwp_previews_filter_post_type_setting', $post_types );
- self::create_settings_page( $post_types )->register_page();
+ public function register_settings_pages(): void {
+ add_action( 'admin_menu', function (): void {
+
+ // Note: We didn't initalize in the constructor because we need to ensure
+ // the post types are registered before we can use them.
+ $post_types = $this->types_config->get_public_post_types();
+
+ $page = new Menu_Page(
+ __( 'HWP Previews Settings', 'hwp-previews' ),
+ 'HWP Previews',
+ self::PLUGIN_MENU_SLUG,
+ trailingslashit( HWP_PREVIEWS_TEMPLATE_DIR ) . 'settings-page-main.php',
+ [
+ 'hwp_previews_main_page_config' => [
+ 'tabs' => $post_types,
+ 'current_tab' => $this->get_current_tab( $post_types ),
+ 'params' => $this->parameters->get_descriptions(),
+ ],
+ ],
+ );
+
+ $page->register_page();
} );
}
/**
* Registers the settings fields for each post type.
*/
- public static function register_settings_fields(): void {
- add_action( 'admin_init', static function (): void {
-
- $post_types = ( null === self::$types_config ) ? [] : self::$types_config->get_public_post_types();
-
- /**
- * Array of post types where key is the post type slug and value is the label.
- *
- * @var array $post_types
- */
- $post_types = apply_filters( 'hwp_previews_filter_post_type_setting', $post_types );
-
- /**
- * Register setting itself.
- */
- self::create_tabbed_settings( $post_types )->register_settings();
-
- /**
- * Register settings sections and fields for each post type.
- */
- foreach ( $post_types as $post_type => $label ) {
- self::create_setting_section( $post_type, $label )->register_section( HWP_PREVIEWS_SETTINGS_KEY, $post_type, "hwp-previews-{$post_type}" );
- }
+ public function register_settings_fields(): void {
+ add_action( 'admin_init', function (): void {
+ $settings_manager = new Settings_Form_Manager(
+ $this->types_config->get_public_post_types(),
+ new Settings_Field_Collection()
+ );
+ $settings_manager->render_form();
}, 10, 0 );
}
+ /**
+ * Get the current tab for the settings page.
+ *
+ * @param array $post_types The post types to be used in the settings page.
+ * @param string $tab The name of the tab.
+ */
+ public function get_current_tab( array $post_types, string $tab = 'tab' ): string {
+ if ( empty( $post_types ) ) {
+ return '';
+ }
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Nonce verification not required for tab selection.
+ $value = $_GET[ $tab ] ?? '';
+ if ( ! is_string( $value ) || '' === $value ) {
+ return (string) key( $post_types );
+ }
+
+ // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Nonce verification not required for tab selection.
+ return sanitize_key( $value );
+ }
+
/**
* Enqueues the JavaScript and the CSS file for the plugin admin area.
*/
- public static function load_scripts_styles(): void {
+ public function load_scripts_styles(): void {
add_action( 'admin_enqueue_scripts', static function ( string $hook ): void {
if ( 'settings_page_' . self::PLUGIN_MENU_SLUG !== $hook ) {
@@ -122,118 +153,4 @@ public static function load_scripts_styles(): void {
);
} );
}
-
- /**
- * Creates the settings page.
- *
- * @param array $post_types The post types to be used in the settings page.
- */
- public static function create_settings_page( array $post_types ): Menu_Page {
-
- $descriptions = ( null === self::$parameters ) ? [] : self::$parameters->get_descriptions();
-
-
- return new Menu_Page(
- __( 'HWP Previews Settings', 'hwp-previews' ),
- 'HWP Previews',
- self::PLUGIN_MENU_SLUG,
- trailingslashit( HWP_PREVIEWS_TEMPLATE_DIR ) . 'settings-page-main.php',
- [
- 'hwp_previews_main_page_config' => [
- 'tabs' => $post_types,
- 'current_tab' => self::get_current_tab( $post_types ),
- 'params' => $descriptions,
- ],
- ],
- );
- }
-
- /**
- * Creates the settings section for a specific post type.
- *
- * @param string $post_type The post type slug.
- * @param string $label The label for the post type.
- */
- public static function create_setting_section( string $post_type, string $label ): Settings_Section {
- return new Settings_Section(
- 'hwp_previews_section_' . $post_type,
- '',
- 'hwp-previews-' . $post_type,
- self::create_settings_fields( $post_type, $label, is_post_type_hierarchical( $post_type ) )
- );
- }
-
- /**
- * Creates the settings fields for a specific post type.
- *
- * @param string $post_type The post type slug.
- * @param string $label The label for the post type.
- * @param bool $is_hierarchical Whether the post type is hierarchical.
- *
- * @return array<\HWP\Previews\Admin\Settings\Fields\Abstract_Settings_Field>
- */
- public static function create_settings_fields( string $post_type, string $label, bool $is_hierarchical ): array {
- $fields = [];
- $fields[] = new Checkbox_Field(
- 'enabled',
- // translators: %s is the label of the post type.
- sprintf( __( 'Enable HWP Previews for %s', 'hwp-previews' ), $label ),
- __( 'Turn preview functionality on or off for this public post type.', 'hwp-previews' )
- );
-
- if ( $is_hierarchical ) {
- $fields[] = new Checkbox_Field(
- 'post_statuses_as_parent',
- __( 'Allow all post statuses in parents option', 'hwp-previews' ),
- __( 'By default WordPress only allows published posts to be parents. This option allows posts of all statuses to be used as parent within hierarchical post types.', 'hwp-previews' )
- );
- }
-
- $fields[] = new Checkbox_Field(
- 'in_iframe',
- sprintf( __( 'Load previews in iframe', 'hwp-previews' ), $label ),
- __( 'With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.', 'hwp-previews' )
- );
- $fields[] = new Text_Input_Field(
- 'preview_url',
- // translators: %s is the label of the post type.
- sprintf( __( 'Preview URL for %s', 'hwp-previews' ), $label ),
- __( 'Construct your preview URL using the tags on the right. You can add any parameters needed to support headless previews.', 'hwp-previews' ),
- "https://localhost:3000/{$post_type}?preview=true&post_id={ID}&name={slug}",
- 'code hwp-previews-url' // The class is being used as a query for the JS.
- );
-
- return $fields;
- }
-
- /**
- * Creates the tabbed settings object.
- *
- * @param array $post_types Post Types as a tabs.
- */
- public static function create_tabbed_settings( array $post_types ): Tabbed_Settings {
- $helper = Settings_Helper::get_instance();
-
- return new Tabbed_Settings(
- HWP_PREVIEWS_SETTINGS_GROUP,
- HWP_PREVIEWS_SETTINGS_KEY,
- array_keys( $post_types ),
- $helper->get_settings_config()
- );
- }
-
- /**
- * Get the current tab for the settings page.
- *
- * @param array $post_types The post types to be used in the settings page.
- * @param string $tab The name of the tab.
- */
- public static function get_current_tab( $post_types, string $tab = 'tab' ): string {
- // phpcs:disable WordPress.Security.NonceVerification.Recommended
- if ( isset( $_GET[ $tab ] ) && is_string( $_GET[ $tab ] ) ) {
- return sanitize_key( $_GET[ $tab ] );
- }
-
- return ! empty( $post_types ) ? (string) key( $post_types ) : '';
- }
}
diff --git a/plugins/hwp-previews/src/Hooks/Preview_Hooks.php b/plugins/hwp-previews/src/Hooks/Preview_Hooks.php
index e9889bea..9b9b7938 100644
--- a/plugins/hwp-previews/src/Hooks/Preview_Hooks.php
+++ b/plugins/hwp-previews/src/Hooks/Preview_Hooks.php
@@ -4,12 +4,12 @@
namespace HWP\Previews\Hooks;
-use HWP\Previews\Admin\Settings\Helper\Settings_Helper;
use HWP\Previews\Post\Parent\Post_Parent_Manager;
use HWP\Previews\Post\Status\Contracts\Post_Statuses_Config_Interface;
use HWP\Previews\Post\Status\Post_Statuses_Config;
use HWP\Previews\Post\Type\Contracts\Post_Types_Config_Interface;
use HWP\Previews\Post\Type\Post_Types_Config_Registry;
+use HWP\Previews\Preview\Helper\Settings_Helper;
use HWP\Previews\Preview\Link\Preview_Link_Placeholder_Resolver;
use HWP\Previews\Preview\Link\Preview_Link_Service;
use HWP\Previews\Preview\Parameter\Preview_Parameter_Registry;
@@ -21,7 +21,7 @@ class Preview_Hooks {
/**
* Settings helper instance that provides access to plugin settings.
*
- * @var \HWP\Previews\Admin\Settings\Helper\Settings_Helper|null
+ * @var \HWP\Previews\Preview\Helper\Settings_Helper|null
*/
protected static ?Settings_Helper $settings_helper = null;
diff --git a/plugins/hwp-previews/src/Integration/Faust_Integration.php b/plugins/hwp-previews/src/Integration/Faust_Integration.php
index 07d3f550..70c70ecc 100644
--- a/plugins/hwp-previews/src/Integration/Faust_Integration.php
+++ b/plugins/hwp-previews/src/Integration/Faust_Integration.php
@@ -4,8 +4,8 @@
namespace HWP\Previews\Integration;
-use HWP\Previews\Admin\Settings\Helper\Settings_Group;
use HWP\Previews\Post\Type\Post_Types_Config_Registry;
+use HWP\Previews\Preview\Helper\Settings_Group;
class Faust_Integration {
/**
@@ -39,8 +39,8 @@ public static function configure_faust(): void {
// Remove FaustWP post preview link filter to avoid conflicts with our custom preview link generation.
remove_filter( 'preview_post_link', 'WPE\FaustWP\Replacement\post_preview_link', 1000 );
- self::display_faust_admin_notice();
- }
+ self::display_faust_admin_notice();
+ }
}
/**
@@ -99,7 +99,7 @@ public static function set_default_faust_settings(): void {
$setting_enabled_key = $settings_group->get_settings_key_enabled();
$default_settings = [];
-
+
foreach ( $types_config->get_public_post_types() as $key => $label ) {
$default_settings[ $key ] = [
$setting_enabled_key => true,
diff --git a/plugins/hwp-previews/src/Post/Data/Post_Data_Model.php b/plugins/hwp-previews/src/Post/Data/Post_Data_Model.php
deleted file mode 100644
index 3bc62641..00000000
--- a/plugins/hwp-previews/src/Post/Data/Post_Data_Model.php
+++ /dev/null
@@ -1,73 +0,0 @@
- $data Array of data to hydrate the model.
- * @param int $post_id Post ID.
- */
- public function __construct( array $data, int $post_id = 0 ) {
- $this->ID = (int) ( $data['ID'] ?? $post_id );
- $this->post_status = (string) ( $data['post_status'] ?? '' );
- $this->post_type = (string) ( $data['post_type'] ?? '' );
- $this->post_name = (string) ( $data['post_name'] ?? '' );
- $this->post_title = (string) ( $data['post_title'] ?? '' );
- }
-
- /**
- * This is a very good example of the method.
- *
- * @param string $name The name of the property.
- * @param string|int|float|bool|array|object|null $value The value to set.
- *
- * @throws \Exception When attempting to modify a readonly property.
- */
- public function __set( string $name, $value ): void {
- throw new Exception( 'Cannot modify readonly property: ' . esc_html( $name ) );
- }
-}
diff --git a/plugins/hwp-previews/src/Post/Type/Post_Types_Config.php b/plugins/hwp-previews/src/Post/Type/Post_Types_Config.php
index 1022c759..33ad2fc0 100644
--- a/plugins/hwp-previews/src/Post/Type/Post_Types_Config.php
+++ b/plugins/hwp-previews/src/Post/Type/Post_Types_Config.php
@@ -97,12 +97,13 @@ public function gutenberg_editor_enabled( string $post_type ): bool {
*/
public function get_public_post_types(): array {
$post_types = get_post_types( [ 'public' => true ], 'objects' );
- $result = [];
+
+ $result = [];
foreach ( $post_types as $post_type ) {
$result[ $post_type->name ] = $post_type->label;
}
- return $result;
+ return apply_filters( 'hwp_previews_filter_available_post_types', $result );
}
}
diff --git a/plugins/hwp-previews/src/Post/Type/Post_Types_Config_Registry.php b/plugins/hwp-previews/src/Post/Type/Post_Types_Config_Registry.php
index 2eacf296..c5e5d2c7 100644
--- a/plugins/hwp-previews/src/Post/Type/Post_Types_Config_Registry.php
+++ b/plugins/hwp-previews/src/Post/Type/Post_Types_Config_Registry.php
@@ -4,8 +4,8 @@
namespace HWP\Previews\Post\Type;
-use HWP\Previews\Admin\Settings\Helper\Settings_Helper;
use HWP\Previews\Post\Type\Contracts\Post_Types_Config_Interface;
+use HWP\Previews\Preview\Helper\Settings_Helper;
/**
* Class Post_Types_Config_Registry.
diff --git a/plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Group.php b/plugins/hwp-previews/src/Preview/Helper/Settings_Group.php
similarity index 97%
rename from plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Group.php
rename to plugins/hwp-previews/src/Preview/Helper/Settings_Group.php
index 9954740a..6e9b2e15 100644
--- a/plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Group.php
+++ b/plugins/hwp-previews/src/Preview/Helper/Settings_Group.php
@@ -2,7 +2,7 @@
declare(strict_types=1);
-namespace HWP\Previews\Admin\Settings\Helper;
+namespace HWP\Previews\Preview\Helper;
/**
* Settings_Group class.
@@ -28,7 +28,7 @@ class Settings_Group {
/**
* The settings helper instance.
*
- * @var \HWP\Previews\Admin\Settings\Helper\Settings_Group|null
+ * @var \HWP\Previews\Preview\Helper\Settings_Group|null
*/
protected static $instance = null;
diff --git a/plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Helper.php b/plugins/hwp-previews/src/Preview/Helper/Settings_Helper.php
similarity index 88%
rename from plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Helper.php
rename to plugins/hwp-previews/src/Preview/Helper/Settings_Helper.php
index b6f7551a..b0d15590 100644
--- a/plugins/hwp-previews/src/Admin/Settings/Helper/Settings_Helper.php
+++ b/plugins/hwp-previews/src/Preview/Helper/Settings_Helper.php
@@ -2,25 +2,25 @@
declare(strict_types=1);
-namespace HWP\Previews\Admin\Settings\Helper;
+namespace HWP\Previews\Preview\Helper;
class Settings_Helper {
/**
* The settings group.
*
- * @var \HWP\Previews\Admin\Settings\Helper\Settings_Group
+ * @var \HWP\Previews\Preview\Helper\Settings_Group
*/
protected Settings_Group $settings_group;
/**
* The settings helper instance.
*
- * @var \HWP\Previews\Admin\Settings\Helper\Settings_Helper|null
+ * @var \HWP\Previews\Preview\Helper\Settings_Helper|null
*/
protected static $instance = null;
/**
- * @param \HWP\Previews\Admin\Settings\Helper\Settings_Group $settings_group The settings group.
+ * @param \HWP\Previews\Preview\Helper\Settings_Group $settings_group The settings group.
*/
public function __construct( Settings_Group $settings_group ) {
$this->settings_group = $settings_group;
@@ -29,7 +29,7 @@ public function __construct( Settings_Group $settings_group ) {
/**
* Get an instance of the Settings_Helper class.
*
- * @return \HWP\Previews\Admin\Settings\Helper\Settings_Helper
+ * @return \HWP\Previews\Preview\Helper\Settings_Helper
*/
public static function get_instance(): self {
@@ -50,6 +50,7 @@ public static function get_instance(): self {
* @return array
*/
public function get_settings_config(): array {
+ // @TODO: Remove this method when the settings group is no longer needed.
return $this->settings_group->get_settings_config();
}
diff --git a/plugins/hwp-previews/tests/_data/.gitignore b/plugins/hwp-previews/tests/_data/.gitignore
new file mode 100644
index 00000000..9a9c1ca1
--- /dev/null
+++ b/plugins/hwp-previews/tests/_data/.gitignore
@@ -0,0 +1 @@
+dump.sql
diff --git a/plugins/hwp-previews/tests/_data/.gitkeep b/plugins/hwp-previews/tests/_data/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/plugins/hwp-previews/tests/_data/config.php b/plugins/hwp-previews/tests/_data/config.php
new file mode 100644
index 00000000..8c73df40
--- /dev/null
+++ b/plugins/hwp-previews/tests/_data/config.php
@@ -0,0 +1 @@
+field = new Checkbox_Field(
+ 'in_iframe',
+ false,
+ 'Use iframe to render previews',
+ 'With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.',
+ false,
+ 'custom-css-class'
+ );
+ }
+
+ public function test_basic_field_properties(): void {
+ $field = $this->field;
+ $this->assertEquals('in_iframe', $field->get_id());
+ $this->assertFalse($field->is_hierarchical());
+ }
+
+ public function test_should_render_field_non_hierarchal(): void {
+ $field = $this->field;
+ $this->assertInstanceOf(Settings_Field_Interface::class, $field);
+ $this->assertTrue($field->should_render_field(true));
+ $this->assertTrue($field->should_render_field(false));
+ }
+
+ public function test_should_render_field_hierarchical(): void {
+ $field = new Checkbox_Field(
+ 'in_iframe',
+ true,
+ 'Use iframe to render previews',
+ 'With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.'
+ );
+ $this->assertFalse($field->should_render_field(false));
+ $this->assertTrue($field->should_render_field(true));
+ }
+
+ public function test_sanitize_field(): void {
+ $field = $this->field;
+
+ $this->assertEquals('1', $field->sanitize_field('1'));
+ $this->assertEquals('0', $field->sanitize_field('0'));
+ $this->assertEquals('1', $field->sanitize_field('on'));
+ $this->assertEquals('1', $field->sanitize_field('off'));
+ $this->assertEquals('1', $field->sanitize_field('random'));
+ }
+
+ public function test_render_field_checked(): void {
+ $field = $this->field;
+ $option_value = ['in_iframe' => '1'];
+ $setting_key = HWP_PREVIEWS_SETTINGS_KEY;
+ $post_type = 'post';
+
+ $expected_input_name = 'hwp_previews_settings[' . $post_type . '][in_iframe]';
+ $expected_css_class = 'custom-css-class';
+ $expected_output = '';
+
+ $rendered_output = $field->render_field($option_value, $setting_key, $post_type);
+
+ $this->assertEquals($expected_output, $rendered_output);
+ }
+
+ public function test_render_field_unchecked(): void {
+ $field = $this->field;
+ $option_value = ['in_iframe' => '0'];
+ $setting_key = HWP_PREVIEWS_SETTINGS_KEY;
+ $post_type = 'post';
+
+ $expected_input_name = 'hwp_previews_settings[' . $post_type . '][in_iframe]';
+ $expected_css_class = 'custom-css-class';
+ $expected_output = '';
+
+ $rendered_output = $field->render_field($option_value, $setting_key, $post_type);
+
+ $this->assertEquals($expected_output, $rendered_output);
+ }
+
+ public function test_render_field_without_css_class(): void {
+ $field = new Checkbox_Field(
+ 'in_iframe',
+ false,
+ 'Use iframe to render previews',
+ 'With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.'
+ );
+
+ $rendered_output = $field->render_field([], HWP_PREVIEWS_SETTINGS_KEY, 'page');
+
+ $this->assertEquals(
+ '',
+ $rendered_output
+ );
+ }
+
+ public function test_get_title(): void {
+ $field = $this->field;
+ $this->assertEquals('Use iframe to render previews', $field->get_title());
+ }
+
+ public function test_get_description(): void {
+ $field = $this->field;
+ $this->assertEquals('With this option enabled, headless previews will be displayed inside an iframe on the preview page, without leaving WordPress.', $field->get_description());
+ }
+
+ public function test_add_settings_field_registers_field(): void {
+ $field = $this->field;
+ global $wp_settings_fields;
+ $field->add_settings_field('section_id', 'page_id', ['foo' => 'bar']);
+ $this->assertArrayHasKey('page_id', $wp_settings_fields);
+ $this->assertArrayHasKey('section_id', $wp_settings_fields['page_id']);
+ }
+
+ public function test_settings_field_callback_outputs_html(): void {
+ $field = $this->field;
+ ob_start();
+ $args = [
+ 'post_type' => 'post',
+ 'settings_key' => HWP_PREVIEWS_SETTINGS_KEY,
+ ];
+ $field->settings_field_callback($args);
+ $output = ob_get_clean();
+ $this->assertStringContainsString('hwp-previews-tooltip', $output);
+ $this->assertStringContainsString('dashicons-editor-help', $output);
+ $this->assertStringContainsString('input type="checkbox"', $output);
+ }
+}
diff --git a/plugins/hwp-previews/tests/wpunit/Admin/Settings/Fields/Field/TextInputFieldTest.php b/plugins/hwp-previews/tests/wpunit/Admin/Settings/Fields/Field/TextInputFieldTest.php
new file mode 100644
index 00000000..ebba02cd
--- /dev/null
+++ b/plugins/hwp-previews/tests/wpunit/Admin/Settings/Fields/Field/TextInputFieldTest.php
@@ -0,0 +1,181 @@
+field = new Text_Input_Field(
+ 'preview_url',
+ false,
+ 'Preview URL',
+ 'The preview URL',
+ 'https://example.com/%s?preview=true&post_id={ID}&name={slug}',
+ 'custom-css-class'
+ );
+ }
+
+ public function test_basic_field_properties(): void {
+ $field = $this->field;
+ $this->assertEquals( 'preview_url', $field->get_id() );
+ $this->assertFalse( $field->is_hierarchical() );
+ $this->assertEquals( 'text', $field->get_input_type() );
+ }
+
+ public function test_should_render_field_non_hierarchal() {
+ $field = $this->field;
+ $this->assertInstanceOf( Settings_Field_Interface::class, $field );
+ $this->assertTrue( $field->should_render_field( true ) );
+ $this->assertTrue( $field->should_render_field( false ) );
+ }
+
+ public function test_should_render_field_hierarchical() {
+ $field = new Text_Input_Field(
+ 'post_statuses_as_parent',
+ true,
+ 'Hierarchical Preview URL',
+ 'By default WordPress only allows published posts to be parents. This option allows posts of all statuses to be used as parent within hierarchical post types.',
+ );
+
+ $this->assertFalse( $field->should_render_field( false ) );
+ $this->assertTrue( $field->should_render_field( true ) );
+
+ }
+
+ public function test_sanitize_field() {
+ $field = $this->field;
+
+ // Valid Input
+ $input = 'https://example.com/?preview=true&post_id=123&name=test-post';
+ $sanitized = $field->sanitize_field( $input );
+ $this->assertEquals( $input, $sanitized );
+
+ // XSS
+ $input = 'https://example.com/?preview=true';
+ $sanitized = $field->sanitize_field( $input );
+ $this->assertStringNotContainsString( 'https://example.com/?preview=true';
+ $sanitized = $field->sanitize_field( $input );
+ $this->assertStringNotContainsString( '