diff --git a/.github/workflows/install-testing.yml b/.github/workflows/install-testing.yml index dfec592c2e154..ca03ebd518a00 100644 --- a/.github/workflows/install-testing.yml +++ b/.github/workflows/install-testing.yml @@ -11,11 +11,14 @@ on: paths: - '.github/workflows/install-testing.yml' - '.version-support-*.json' + - '.github/workflows/reusable-support-json-reader-v1.yml' pull_request: # Always test the workflow when changes are suggested. paths: - - '.github/workflows/install-testing.yml' - '.version-support-*.json' + - '.github/workflows/install-testing.yml' + - '.github/workflows/reusable-support-json-reader-v1.yml' + schedule: - cron: '0 0 * * 1' workflow_dispatch: @@ -37,66 +40,21 @@ concurrency: permissions: {} jobs: - # Determines the appropriate values for PHP and database versions based on the WordPress version being tested. - # - # Performs the following steps: - # - Checks out the repository. - # - Fetches the versions of PHP to test. - # - Fetches the versions of MySQL to test. - build-matrix: - name: Determine PHP Versions to test - runs-on: ubuntu-latest + # Determines the supported values for PHP and database versions based on the WordPress version being tested. + build-test-matrix: + name: Build Test Matrix + uses: WordPress/wordpress-develop/.github/workflows/reusable-support-json-reader-v1.yml@trunk + permissions: + contents: read + secrets: inherit if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} - timeout-minutes: 5 - outputs: - major-wp-version: ${{ steps.major-wp-version.outputs.version }} - php-versions: ${{ steps.php-versions.outputs.versions }} - mysql-versions: ${{ steps.mysql-versions.outputs.versions }} - - steps: - - name: Checkout repository - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac # v4.0.0 - with: - show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - - - name: Determine the major WordPress version - id: major-wp-version - run: | - if [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "nightly" ] && [ "${{ inputs.wp-version }}" != "latest" ]; then - echo "version=$(echo "${{ inputs.wp-version }}" | tr '.' '-' | cut -d '-' -f1-2)" >> $GITHUB_OUTPUT - elif [ "${{ inputs.wp-version }}" ]; then - echo "version=$(echo "${{ inputs.wp-version }}")" >> $GITHUB_OUTPUT - else - echo "version=nightly" >> $GITHUB_OUTPUT - fi - - # Look up the major version's specific PHP support policy when a version is provided. - # Otherwise, use the current PHP support policy. - - name: Get supported PHP versions - id: php-versions - run: | - if [ "${{ steps.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ steps.major-wp-version.outputs.version }}" != "nightly" ]; then - echo "versions=$(jq -r '.["${{ steps.major-wp-version.outputs.version }}"] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT - else - echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT - fi - - # Look up the major version's specific MySQL support policy when a version is provided. - # Otherwise, use the current MySQL support policy. - - name: Get supported MySQL versions - id: mysql-versions - run: | - if [ "${{ steps.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ steps.major-wp-version.outputs.version }}" != "nightly" ]; then - echo "versions=$(jq -r '.["${{ steps.major-wp-version.outputs.version }}"] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT - else - echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT - fi + with: + wp-version: ${{ inputs.wp-version }} # Test the WordPress installation process through WP-CLI. # # Performs the following steps: # - Sets up PHP. - # - Starts the database server. # - Downloads the specified version of WordPress. # - Creates a `wp-config.php` file. # - Installs WordPress. @@ -107,14 +65,14 @@ jobs: runs-on: ${{ matrix.os }} if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} timeout-minutes: 10 - needs: [ build-matrix ] + needs: [ build-test-matrix ] strategy: fail-fast: false matrix: os: [ ubuntu-latest ] - php: ${{ fromJSON( needs.build-matrix.outputs.php-versions ) }} + php: ${{ fromJSON( needs.build-test-matrix.outputs.php-versions ) }} db-type: [ 'mysql' ] - db-version: ${{ fromJSON( needs.build-matrix.outputs.mysql-versions ) }} + db-version: ${{ fromJSON( needs.build-test-matrix.outputs.mysql-versions ) }} multisite: [ false, true ] memcached: [ false ] @@ -125,6 +83,14 @@ jobs: - db-version: '5.0' - db-version: '5.1' - db-version: '5.5' + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' + - php: '7.2' + db-version: '9.0' + - php: '7.3' + db-version: '9.0' services: database: @@ -133,13 +99,13 @@ jobs: - 3306 options: >- --health-cmd="mysqladmin ping" - --health-interval=30s - --health-timeout=10s - --health-retries=5 - -e MYSQL_ROOT_PASSWORD=root - -e MYSQL_DATABASE=test_db + --health-interval="30s" + --health-timeout="10s" + --health-retries="5" + -e MYSQL_ROOT_PASSWORD="root" + -e MYSQL_DATABASE="test_db" --entrypoint sh ${{ matrix.db-type }}:${{ matrix.db-version }} - -c "exec docker-entrypoint.sh mysqld${{ matrix.db-version != '5.5' && ' --default-authentication-plugin=mysql_native_password"' || '' }} + -c "exec docker-entrypoint.sh mysqld${{ matrix.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), matrix.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" steps: - name: Set up PHP ${{ matrix.php }} @@ -149,10 +115,6 @@ jobs: coverage: none tools: wp-cli${{ contains( fromJSON('["5.4", "5.5"]'), matrix.php ) && ':2.4.0' || '' }} - - name: Start the database server - run: | - sudo systemctl start ${{ matrix.db-type }} - - name: Download WordPress run: wp core download ${{ inputs.wp-version && format( '--version={0}', inputs.wp-version ) || '--version=nightly' }} diff --git a/.github/workflows/local-docker-environment.yml b/.github/workflows/local-docker-environment.yml new file mode 100644 index 0000000000000..1e25c82ef1287 --- /dev/null +++ b/.github/workflows/local-docker-environment.yml @@ -0,0 +1,154 @@ +name: Local Docker Environment + +on: + push: + branches: + - trunk + - '6.[8-9]' + - '[7-9].[0-9]' + paths: + # Any changes to Docker related files. + - '.env.example' + - 'docker-compose.yml' + # Any changes to local environment related files + - 'tools/local-env/**' + # These files manage packages used by the local environment. + - 'package*.json' + # These files configure Composer. Changes could affect the local environment. + - 'composer.*' + # These files define the versions to test. + - '.version-support-*.json' + # Changes to this and related workflow files should always be verified. + - '.github/workflows/local-docker-environment.yml' + - '.github/workflows/reusable-support-json-reader-v1.yml' + - '.github/workflows/reusable-test-docker-environment-v1.yml' + pull_request: + branches: + - trunk + - '6.[8-9]' + - '[7-9].[0-9]' + paths: + # Any changes to Docker related files. + - '.env.example' + - 'docker-compose.yml' + # Any changes to local environment related files + - 'tools/local-env/**' + # These files manage packages used by the local environment. + - 'package*.json' + # These files configure Composer. Changes could affect the local environment. + - 'composer.*' + # These files define the versions to test. + - '.version-support-*.json' + # Changes to this and related workflow files should always be verified. + - '.github/workflows/local-docker-environment.yml' + - '.github/workflows/reusable-support-json-reader-v1.yml' + - '.github/workflows/reusable-test-docker-environment-v1.yml' + workflow_dispatch: + +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for pull requests + # or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + +# Disable permissions for all available scopes by default. +# Any needed permissions should be configured at the job level. +permissions: {} + +jobs: + # + # Determines the appropriate supported values for PHP and database versions based on the WordPress + # version being tested. + # + build-test-matrix: + name: Build Test Matrix + uses: WordPress/wordpress-develop/.github/workflows/reusable-support-json-reader-v1.yml@trunk + permissions: + contents: read + secrets: inherit + if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} + with: + wp-version: ${{ github.event_name == 'pull_request' && github.base_ref || github.ref_name }} + + # Tests the local Docker environment. + environment-tests-mysql: + name: PHP ${{ matrix.php }} + uses: WordPress/wordpress-develop/.github/workflows/reusable-test-local-docker-environment-v1.yml@trunk + permissions: + contents: read + if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} + needs: [ build-test-matrix ] + strategy: + fail-fast: false + matrix: + os: [ ubuntu-latest ] + memcached: [ false, true ] + php: ${{ fromJSON( needs.build-test-matrix.outputs.php-versions ) }} + db-version: ${{ fromJSON( needs.build-test-matrix.outputs.mysql-versions ) }} + + exclude: + # The MySQL 5.5 containers will not start. + - db-version: '5.5' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3 + - php: '7.2' + db-version: '9.0' + - php: '7.3' + db-version: '9.0' + + with: + os: ${{ matrix.os }} + php: ${{ matrix.php }} + db-type: 'mysql' + db-version: ${{ matrix.db-version }} + memcached: ${{ matrix.memcached }} + tests-domain: ${{ matrix.tests-domain }} + + slack-notifications: + name: Slack Notifications + uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk + permissions: + actions: read + contents: read + needs: [ build-test-matrix, environment-tests-mysql ] + if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} + with: + calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} + secrets: + SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }} + SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }} + SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }} + SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }} + + failed-workflow: + name: Failed workflow tasks + runs-on: ubuntu-latest + permissions: + actions: write + needs: [ build-test-matrix, environment-tests-mysql, slack-notifications ] + if: | + always() && + github.repository == 'WordPress/wordpress-develop' && + github.event_name != 'pull_request' && + github.run_attempt < 2 && + ( + contains( needs.*.result, 'cancelled' ) || + contains( needs.*.result, 'failure' ) + ) + + steps: + - name: Dispatch workflow run + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + with: + retries: 2 + retry-exempt-status-codes: 418 + script: | + github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'failed-workflow.yml', + ref: 'trunk', + inputs: { + run_id: '${{ github.run_id }}' + } + }); diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index e4929763afa83..dba6091a5547a 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -36,7 +36,7 @@ jobs: uses: WordPress/wordpress-develop/.github/workflows/reusable-performance.yml@trunk permissions: contents: read - if: ${{ ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) && ! contains( github.event.before, '00000000' ) }} + if: ${{ ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) }} strategy: fail-fast: false matrix: diff --git a/.github/workflows/phpunit-tests.yml b/.github/workflows/phpunit-tests.yml index 50e4c940c2169..62a7aa50f7718 100644 --- a/.github/workflows/phpunit-tests.yml +++ b/.github/workflows/phpunit-tests.yml @@ -47,50 +47,58 @@ jobs: os: [ ubuntu-latest ] php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0', '8.1', '8.2', '8.3' ] + db-version: [ '5.7', '8.0', '8.4', '9.0' ] tests-domain: [ 'example.org' ] multisite: [ false, true ] memcached: [ false ] include: - # Include jobs for PHP 7.4 with memcached. + # Include jobs that test with memcached. - os: ubuntu-latest - php: '7.4' + php: '8.3' db-type: 'mysql' - db-version: '5.7' + db-version: '8.4' tests-domain: 'example.org' multisite: false memcached: true - os: ubuntu-latest - php: '7.4' + php: '8.3' db-type: 'mysql' - db-version: '5.7' + db-version: '8.4' tests-domain: 'example.org' multisite: true memcached: true # Include jobs with a port on the test domain for both single and multisite. - os: ubuntu-latest - php: '7.4' + php: '8.4' db-type: 'mysql' - db-version: '5.7' + db-version: '8.4' tests-domain: 'example.org:8889' multisite: false memcached: false - os: ubuntu-latest - php: '7.4' + php: '8.4' db-type: 'mysql' - db-version: '5.7' + db-version: '8.4' tests-domain: 'example.org:8889' multisite: true memcached: false # Report test results to the Host Test Results. - os: ubuntu-latest db-type: 'mysql' - db-version: '8.0' + db-version: '8.4' tests-domain: 'example.org' multisite: false memcached: false report: true + + exclude: + # MySQL 9.0+ will not work on PHP 7.2 & 7.3 + - php: '7.2' + db-version: '9.0' + - php: '7.3' + db-version: '9.0' + with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -123,15 +131,15 @@ jobs: memcached: [ false ] include: - # Include jobs for PHP 7.4 with memcached. + # Include jobs that test with memcached. - os: ubuntu-latest - php: '7.4' + php: '8.3' db-type: 'mariadb' db-version: '11.2' multisite: false memcached: true - os: ubuntu-latest - php: '7.4' + php: '8.3' db-type: 'mariadb' db-version: '11.2' multisite: true diff --git a/.github/workflows/pull-request-comments.yml b/.github/workflows/pull-request-comments.yml index 51d87691f769d..ab7eba9ceffaa 100644 --- a/.github/workflows/pull-request-comments.yml +++ b/.github/workflows/pull-request-comments.yml @@ -30,7 +30,7 @@ jobs: if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request_target' }} steps: - name: Post a welcome comment - uses: wow-actions/welcome@72817eb31cda1de60f51893d80e2e82ce57f7e76 # v1.3.0 + uses: wow-actions/welcome@68019c2c271561f63162fea75bb7707ef8a02c85 # v1.3.1 with: FIRST_PR_REACTIONS: 'hooray' FIRST_PR_COMMENT: > @@ -123,6 +123,7 @@ jobs: - name: Leave a comment about testing with Playground uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 + if: ${{ github.actor != 'dependabot[bot]' }} with: script: | const fs = require( 'fs' ); @@ -171,7 +172,7 @@ jobs: permissions: issues: write pull-requests: write - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request_target' && ! github.event.pull_request.draft && github.event.pull_request.state == 'open' }} + if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name == 'pull_request_target' && ! github.event.pull_request.draft && github.event.pull_request.state == 'open' && github.actor != 'dependabot[bot]' }} steps: - name: Check for Trac ticket and manage comment uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 diff --git a/.github/workflows/reusable-coding-standards-javascript.yml b/.github/workflows/reusable-coding-standards-javascript.yml index 74207a8978bbd..156c201bc8f48 100644 --- a/.github/workflows/reusable-coding-standards-javascript.yml +++ b/.github/workflows/reusable-coding-standards-javascript.yml @@ -35,7 +35,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-coding-standards-php.yml b/.github/workflows/reusable-coding-standards-php.yml index 40c4294b0ff51..b07203797eb3e 100644 --- a/.github/workflows/reusable-coding-standards-php.yml +++ b/.github/workflows/reusable-coding-standards-php.yml @@ -60,7 +60,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT - name: Cache PHPCS scan cache - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: | .cache/phpcs-src.json diff --git a/.github/workflows/reusable-end-to-end-tests.yml b/.github/workflows/reusable-end-to-end-tests.yml index 6a6cc5858e33c..1d2273bd588d7 100644 --- a/.github/workflows/reusable-end-to-end-tests.yml +++ b/.github/workflows/reusable-end-to-end-tests.yml @@ -72,7 +72,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-javascript-tests.yml b/.github/workflows/reusable-javascript-tests.yml index 2760df118fe98..842bb034352ed 100644 --- a/.github/workflows/reusable-javascript-tests.yml +++ b/.github/workflows/reusable-javascript-tests.yml @@ -30,7 +30,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-performance.yml b/.github/workflows/reusable-performance.yml index 814e7b95b8d10..0ca7d5be0a30a 100644 --- a/.github/workflows/reusable-performance.yml +++ b/.github/workflows/reusable-performance.yml @@ -102,7 +102,7 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - if: ${{ ( github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' ) && ! contains( github.event.before, '00000000' ) }} + if: ${{ ! contains( github.event.before, '00000000' ) }} steps: - name: Configure environment variables @@ -122,7 +122,7 @@ jobs: run: echo "TARGET_SHA=$(git rev-parse HEAD^1)" >> $GITHUB_ENV - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-php-compatibility.yml b/.github/workflows/reusable-php-compatibility.yml index e22457d29e444..b68db051bf417 100644 --- a/.github/workflows/reusable-php-compatibility.yml +++ b/.github/workflows/reusable-php-compatibility.yml @@ -58,7 +58,7 @@ jobs: run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> $GITHUB_OUTPUT - name: Cache PHP compatibility scan cache - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: .cache/phpcompat.json key: ${{ runner.os }}-date-${{ steps.get-date.outputs.date }}-php-${{ inputs.php-version }}-phpcompat-cache-${{ hashFiles('**/composer.json', 'phpcompat.xml.dist') }} diff --git a/.github/workflows/reusable-phpunit-tests-v1.yml b/.github/workflows/reusable-phpunit-tests-v1.yml index 3098c49066aa7..ad45726102dbe 100644 --- a/.github/workflows/reusable-phpunit-tests-v1.yml +++ b/.github/workflows/reusable-phpunit-tests-v1.yml @@ -95,7 +95,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm @@ -108,7 +108,7 @@ jobs: - name: Cache Composer dependencies if: ${{ env.COMPOSER_INSTALL == true }} - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 env: cache-name: cache-composer-dependencies with: diff --git a/.github/workflows/reusable-phpunit-tests-v2.yml b/.github/workflows/reusable-phpunit-tests-v2.yml index 6df304bcb9f29..d96928e3f1a07 100644 --- a/.github/workflows/reusable-phpunit-tests-v2.yml +++ b/.github/workflows/reusable-phpunit-tests-v2.yml @@ -98,7 +98,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Install Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm @@ -111,7 +111,7 @@ jobs: run: echo "composer_dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache Composer dependencies - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 env: cache-name: cache-composer-dependencies with: diff --git a/.github/workflows/reusable-phpunit-tests-v3.yml b/.github/workflows/reusable-phpunit-tests-v3.yml index 5acdbae89c338..4310be48e0d33 100644 --- a/.github/workflows/reusable-phpunit-tests-v3.yml +++ b/.github/workflows/reusable-phpunit-tests-v3.yml @@ -52,6 +52,11 @@ on: required: false type: 'string' default: 'example.org' + coverage-report: + description: 'Whether to generate a code coverage report.' + required: false + type: boolean + default: false report: description: 'Whether to report results to WordPress.org Hosting Tests' required: false @@ -62,8 +67,14 @@ on: required: false type: boolean default: false + secrets: + CODECOV_TOKEN: + description: 'The Codecov token required for uploading reports.' + required: false env: LOCAL_PHP: ${{ inputs.php }}-fpm + LOCAL_PHP_XDEBUG: ${{ inputs.coverage-report || false }} + LOCAL_PHP_XDEBUG_MODE: ${{ inputs.coverage-report && 'coverage' || 'develop,debug' }} LOCAL_DB_TYPE: ${{ inputs.db-type }} LOCAL_DB_VERSION: ${{ inputs.db-version }} LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} @@ -88,13 +99,15 @@ jobs: # - Logs debug information about what's installed within the WordPress Docker containers. # - Install WordPress within the Docker container. # - Run the PHPUnit tests. + # - Upload the code coverage report to Codecov.io. + # - Upload the HTML code coverage report as an artifact. # - Ensures version-controlled files are not modified or deleted. # - Checks out the WordPress Test reporter repository. # - Submit the test results to the WordPress.org host test results. phpunit-tests: - name: PHP ${{ inputs.php }} / ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.phpunit-test-groups && format( ' ({0})', inputs.phpunit-test-groups ) || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} + name: PHP ${{ inputs.php }} ${{ ! inputs.coverage-report && '/ ' || 'with ' }}${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.multisite && ' multisite' || '' }}${{ inputs.phpunit-test-groups && format( ' ({0})', inputs.phpunit-test-groups ) || '' }}${{ inputs.memcached && ' with memcached' || '' }}${{ inputs.report && ' (test reporting enabled)' || '' }} ${{ 'example.org' != inputs.tests-domain && inputs.tests-domain || '' }} runs-on: ${{ inputs.os }} - timeout-minutes: 20 + timeout-minutes: ${{ inputs.coverage-report && 120 || 20 }} steps: - name: Configure environment variables @@ -108,7 +121,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm @@ -158,7 +171,7 @@ jobs: - name: WordPress Docker container debug information run: | - docker compose run --rm mysql ${{ env.LOCAL_DB_TYPE }} --version + docker compose run --rm mysql ${{ env.LOCAL_DB_TYPE == 'mariadb' && contains( fromJSON('["5.5", "10.0", "10.1", "10.2", "10.3"]'), env.LOCAL_DB_VERSION ) && 'mysql' || env.LOCAL_DB_TYPE }} --version docker compose run --rm php php --version docker compose run --rm php php -m docker compose run --rm php php -i @@ -167,36 +180,53 @@ jobs: - name: Install WordPress run: npm run env:install - - name: Run PHPUnit tests${{ inputs.phpunit-test-groups && format( ' ({0} groups)', inputs.phpunit-test-groups ) || '' }} + - name: Run PHPUnit tests${{ inputs.phpunit-test-groups && format( ' ({0} groups)', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && ' with coverage report' || '' }} continue-on-error: ${{ inputs.allow-errors }} - run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }}${{ inputs.phpunit-test-groups && format( ' --group {0}', inputs.phpunit-test-groups ) || '' }} + run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }}${{ inputs.phpunit-test-groups && format( ' --group {0}', inputs.phpunit-test-groups ) || '' }}${{ inputs.coverage-report && format( ' --coverage-clover wp-code-coverage-{0}-{1}.xml --coverage-html wp-code-coverage-{0}-{1}', ( inputs.multisite && 'multisite' || 'single' ), github.sha ) || '' }} - name: Run AJAX tests - if: ${{ ! inputs.phpunit-test-groups }} + if: ${{ ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ajax - name: Run ms-files tests as a multisite install - if: ${{ inputs.multisite && ! inputs.phpunit-test-groups }} + if: ${{ inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group ms-files - name: Run external HTTP tests - if: ${{ ! inputs.multisite && ! inputs.phpunit-test-groups }} + if: ${{ ! inputs.multisite && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} run: node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit --verbose -c ${{ env.PHPUNIT_CONFIG }} --group external-http # __fakegroup__ is excluded to force PHPUnit to ignore the settings in phpunit.xml.dist. - name: Run (Xdebug) tests - if: ${{ inputs.php != '8.4' && ! inputs.phpunit-test-groups }} + if: ${{ inputs.php != '8.4' && ! inputs.phpunit-test-groups && ! inputs.coverage-report }} continue-on-error: ${{ inputs.allow-errors }} run: LOCAL_PHP_XDEBUG=true node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit -v --group xdebug --exclude-group __fakegroup__ + - name: Upload test coverage report to Codecov + if: ${{ inputs.coverage-report }} + uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }}.xml + flags: ${{ inputs.multisite && 'multisite' || 'single' }},php + fail_ci_if_error: true + + - name: Upload HTML coverage report as artifact + if: ${{ inputs.coverage-report }} + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + with: + name: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} + path: wp-code-coverage${{ inputs.multisite && '-multisite' || '-single' }}-${{ github.sha }} + overwrite: true + - name: Ensure version-controlled files are not modified or deleted run: git diff --exit-code - name: Checkout the WordPress Test Reporter - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && inputs.report }} + if: ${{ github.ref == 'refs/heads/trunk' && inputs.report }} uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: repository: 'WordPress/phpunit-test-runner' @@ -204,7 +234,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Submit test results to the WordPress.org host test results - if: ${{ github.repository == 'WordPress/wordpress-develop' && github.ref == 'refs/heads/trunk' && inputs.report }} + if: ${{ github.ref == 'refs/heads/trunk' && inputs.report }} env: WPT_REPORT_API_KEY: "${{ secrets.WPT_REPORT_API_KEY }}" run: docker compose run --rm -e WPT_REPORT_API_KEY -e WPT_PREPARE_DIR=/var/www -e WPT_TEST_DIR=/var/www php php test-runner/report.php diff --git a/.github/workflows/reusable-support-json-reader-v1.yml b/.github/workflows/reusable-support-json-reader-v1.yml new file mode 100644 index 0000000000000..f351b716fadb6 --- /dev/null +++ b/.github/workflows/reusable-support-json-reader-v1.yml @@ -0,0 +1,124 @@ +## +# A reusable workflow that reads the .version-support-*.json files and returns values for use in a +# test matrix based on a given WordPress version. +## +name: Determine test matrix values + +on: + workflow_call: + inputs: + wp-version: + description: 'The WordPress version to test . Accepts major and minor versions, "latest", or "nightly". Major releases must not end with ".0".' + type: string + default: 'nightly' + repository: + description: 'The repository to read support JSON files from.' + type: string + default: 'WordPress/wordpress-develop' + outputs: + major-wp-version: + description: "The major WordPress version based on the version provided in wp-version" + value: ${{ jobs.major-wp-version.outputs.version }} + php-versions: + description: "The PHP versions to test for the given wp-version" + value: ${{ jobs.php-versions.outputs.versions }} + mysql-versions: + description: "The MySQL versions to test for the given wp-version" + value: ${{ jobs.mysql-versions.outputs.versions }} + +jobs: + # Determines the major version of WordPress being tested. + # + # The data in the JSON files are indexed by major version, so this is used to look up the appropriate support policy. + # + # Performs the following steps: + # - Checks out the repository + # - Returns the major WordPress version as an output based on the value passed to the wp-version input. + major-wp-version: + name: Determine major WordPress version + runs-on: ubuntu-latest + timeout-minutes: 5 + outputs: + version: ${{ steps.major-wp-version.outputs.version }} + + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: ${{ inputs.repository }} + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + - name: Determine the major WordPress version + id: major-wp-version + run: | + if [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "nightly" ] && [ "${{ inputs.wp-version }}" != "latest" ] && [ "${{ inputs.wp-version }}" != "trunk" ]; then + echo "version=$(echo "${{ inputs.wp-version }}" | tr '.' '-' | cut -d '-' -f1-2)" >> $GITHUB_OUTPUT + elif [ "${{ inputs.wp-version }}" ] && [ "${{ inputs.wp-version }}" != "trunk" ]; then + echo "version=$(echo "${{ inputs.wp-version }}")" >> $GITHUB_OUTPUT + else + echo "version=nightly" >> $GITHUB_OUTPUT + fi + + # Determines the versions of PHP supported for a version of WordPress. + # + # Performs the following steps: + # - Checks out the repository + # - Returns the versions of PHP supported for the major version of WordPress by parsing the + # .version-support-php.json file and returning the values in that version's index. + php-versions: + name: Determine PHP versions + runs-on: ubuntu-latest + needs: [ major-wp-version ] + timeout-minutes: 5 + outputs: + versions: ${{ steps.php-versions.outputs.versions }} + + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: ${{ inputs.repository }} + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + # Look up the major version's specific PHP support policy when a version is provided. + # Otherwise, use the current PHP support policy. + - name: Get supported PHP versions + id: php-versions + run: | + if [ "${{ needs.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ needs.major-wp-version.outputs.version }}" != "nightly" ]; then + echo "versions=$(jq -r '.["${{ needs.major-wp-version.outputs.version }}"] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT + else + echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-php.json)" >> $GITHUB_OUTPUT + fi + + # Determines the versions of MySQL supported for a version of WordPress. + # + # Performs the following steps: + # - Checks out the repository + # - Returns the versions of MySQL supported for the major version of WordPress by parsing the + # .version-support-mysql.json file and returning the values in that version's index. + mysql-versions: + name: Determine MySQL versions + runs-on: ubuntu-latest + needs: [ major-wp-version ] + timeout-minutes: 5 + outputs: + versions: ${{ steps.mysql-versions.outputs.versions }} + + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + repository: ${{ inputs.repository }} + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + # Look up the major version's specific MySQL support policy when a version is provided. + # Otherwise, use the current MySQL support policy. + - name: Get supported MySQL versions + id: mysql-versions + run: | + if [ "${{ needs.major-wp-version.outputs.version }}" != "latest" ] && [ "${{ needs.major-wp-version.outputs.version }}" != "nightly" ]; then + echo "versions=$(jq -r '.["${{ needs.major-wp-version.outputs.version }}"] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT + else + echo "versions=$(jq -r '.[ (keys[-1]) ] | @json' .version-support-mysql.json)" >> $GITHUB_OUTPUT + fi diff --git a/.github/workflows/reusable-test-core-build-process.yml b/.github/workflows/reusable-test-core-build-process.yml index 4a887f3b69233..e2683961471c1 100644 --- a/.github/workflows/reusable-test-core-build-process.yml +++ b/.github/workflows/reusable-test-core-build-process.yml @@ -63,7 +63,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-test-gutenberg-build-process.yml b/.github/workflows/reusable-test-gutenberg-build-process.yml index 8e52b02236239..86756a5043b55 100644 --- a/.github/workflows/reusable-test-gutenberg-build-process.yml +++ b/.github/workflows/reusable-test-gutenberg-build-process.yml @@ -55,7 +55,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/reusable-test-local-docker-environment-v1.yml b/.github/workflows/reusable-test-local-docker-environment-v1.yml new file mode 100644 index 0000000000000..4dccd7ef3dccd --- /dev/null +++ b/.github/workflows/reusable-test-local-docker-environment-v1.yml @@ -0,0 +1,160 @@ +## +# A reusable workflow that ensures the local Docker environment is working properly. +# +# This workflow is used by `trunk` and branches >= 6.8. +## +name: Test local Docker environment + +on: + workflow_call: + inputs: + os: + description: 'Operating system to test' + required: false + type: 'string' + default: 'ubuntu-latest' + php: + description: 'The version of PHP to use, in the format of X.Y' + required: false + type: 'string' + default: 'latest' + db-type: + description: 'Database type. Valid types are mysql and mariadb' + required: false + type: 'string' + default: 'mysql' + db-version: + description: 'Database version' + required: false + type: 'string' + default: '8.0' + memcached: + description: 'Whether to enable memcached' + required: false + type: 'boolean' + default: false + tests-domain: + description: 'The domain to use for the tests' + required: false + type: 'string' + default: 'example.org' + +env: + LOCAL_PHP: ${{ inputs.php == 'latest' && 'latest' || format( '{0}-fpm', inputs.php ) }} + LOCAL_DB_TYPE: ${{ inputs.db-type }} + LOCAL_DB_VERSION: ${{ inputs.db-version }} + LOCAL_PHP_MEMCACHED: ${{ inputs.memcached }} + LOCAL_WP_TESTS_DOMAIN: ${{ inputs.tests-domain }} + PUPPETEER_SKIP_DOWNLOAD: ${{ true }} + +jobs: + # Tests the local Docker environment. + # + # Performs the following steps: + # - Sets environment variables. + # - Checks out the repository. + # - Sets up Node.js. + # - Sets up PHP. + # - Installs Composer dependencies. + # - Installs npm dependencies + # - Logs general debug information about the runner. + # - Logs Docker debug information (about the Docker installation within the runner). + # - Starts the WordPress Docker container. + # - Logs the running Docker containers. + # - Logs debug information about what's installed within the WordPress Docker containers. + # - Install WordPress within the Docker container. + # - Restarts the Docker environment. + # - Runs a WP CLI command. + # - Tests the logs command. + # - Tests the reset command. + # - Ensures version-controlled files are not modified or deleted. + local-docker-environment-tests: + name: PHP ${{ inputs.php }} / ${{ 'mariadb' == inputs.db-type && 'MariaDB' || 'MySQL' }} ${{ inputs.db-version }}${{ inputs.memcached && ' with memcached' || '' }}${{ 'example.org' != inputs.tests-domain && format( ' {0}', inputs.tests-domain ) || '' }} + runs-on: ${{ inputs.os }} + timeout-minutes: 20 + + steps: + - name: Configure environment variables + run: | + echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV + echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV + + - name: Checkout repository + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + with: + show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} + + - name: Set up Node.js + uses: actions/setup-node@1e60f620b9541d16bece96c5465dc8ee9832be0b # v4.0.3 + with: + node-version-file: '.nvmrc' + cache: npm + + ## + # This allows Composer dependencies to be installed using a single step. + # + # Since tests are currently run within the Docker containers where the PHP version varies, + # the same PHP version needs to be configured for the action runner machine so that the correct + # dependency versions are installed and cached. + ## + - name: Set up PHP + uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 + with: + php-version: '${{ inputs.php }}' + coverage: none + + # Since Composer dependencies are installed using `composer update` and no lock file is in version control, + # passing a custom cache suffix ensures that the cache is flushed at least once per week. + - name: Install Composer dependencies + uses: ramsey/composer-install@57532f8be5bda426838819c5ee9afb8af389d51a # v3.0.0 + with: + custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") + + - name: Install npm dependencies + run: npm ci + + - name: General debug information + run: | + npm --version + node --version + curl --version + git --version + composer --version + locale -a + + - name: Docker debug information + run: | + docker -v + + - name: Start Docker environment + run: | + npm run env:start + + - name: Log running Docker containers + run: docker ps -a + + - name: WordPress Docker container debug information + run: | + docker compose run --rm mysql ${{ env.LOCAL_DB_TYPE }} --version + docker compose run --rm php php --version + docker compose run --rm php php -m + docker compose run --rm php php -i + docker compose run --rm php locale -a + + - name: Install WordPress + run: npm run env:install + + - name: Restart Docker environment + run: npm run env:restart + + - name: Test a CLI command + run: npm run env:cli wp option get siteurl + + - name: Test logs command + run: npm run env:logs + + - name: Reset the Docker environment + run: npm run env:reset + + - name: Ensure version-controlled files are not modified or deleted + run: git diff --exit-code diff --git a/.github/workflows/reusable-upgrade-testing.yml b/.github/workflows/reusable-upgrade-testing.yml index 6b285d190c6a3..1d4f26f91ad2c 100644 --- a/.github/workflows/reusable-upgrade-testing.yml +++ b/.github/workflows/reusable-upgrade-testing.yml @@ -42,7 +42,6 @@ jobs: # # Performs the following steps: # - Sets up PHP. - # - Starts the database server. # - Downloads the specified version of WordPress. # - Creates a `wp-config.php` file. # - Installs WordPress. @@ -58,7 +57,15 @@ jobs: image: ${{ inputs.db-type }}:${{ inputs.db-version }} ports: - 3306 - options: --health-cmd="mysqladmin ping" --health-interval=30s --health-timeout=10s --health-retries=5 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=test_db --entrypoint sh ${{ inputs.db-type }}:${{ inputs.db-version }} -c "exec docker-entrypoint.sh mysqld --default-authentication-plugin=mysql_native_password" + options: >- + --health-cmd="mysqladmin ping" + --health-interval="30s" + --health-timeout="10s" + --health-retries="5" + -e MYSQL_ROOT_PASSWORD="root" + -e MYSQL_DATABASE="test_db" + --entrypoint sh ${{ inputs.db-type }}:${{ inputs.db-version }} + -c "exec docker-entrypoint.sh mysqld${{ inputs.db-type == 'mysql' && contains( fromJSON('["7.2", "7.3"]'), inputs.php ) && ' --default-authentication-plugin=mysql_native_password' || '' }}" steps: - name: Set up PHP ${{ inputs.php }} @@ -68,10 +75,6 @@ jobs: coverage: none tools: wp-cli - - name: Start the database server - run: | - sudo systemctl start ${{ inputs.db-type }} - - name: Download WordPress ${{ inputs.wp }} run: wp core download --version=${{ inputs.wp }} diff --git a/.github/workflows/test-and-zip-default-themes.yml b/.github/workflows/test-and-zip-default-themes.yml index 96379495c7fe1..c7e7b3012f8f9 100644 --- a/.github/workflows/test-and-zip-default-themes.yml +++ b/.github/workflows/test-and-zip-default-themes.yml @@ -132,7 +132,7 @@ jobs: show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 + uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0 with: node-version-file: '.nvmrc' cache: npm diff --git a/.github/workflows/test-coverage.yml b/.github/workflows/test-coverage.yml index f6c68ff0afead..3240671b8a29e 100644 --- a/.github/workflows/test-coverage.yml +++ b/.github/workflows/test-coverage.yml @@ -7,6 +7,7 @@ on: - trunk paths: - '.github/workflows/test-coverage.yml' + - '.github/workflows/reusable-phpunit-tests-v3.yml' - 'docker-compose.yml' - 'phpunit.xml.dist' - 'tests/phpunit/multisite.xml' @@ -15,6 +16,7 @@ on: - trunk paths: - '.github/workflows/test-coverage.yml' + - '.github/workflows/reusable-phpunit-tests-v3.yml' - 'docker-compose.yml' - 'phpunit.xml.dist' - 'tests/phpunit/multisite.xml' @@ -24,6 +26,13 @@ on: # Allow manually triggering the workflow. workflow_dispatch: +# Cancels all previous workflow runs for pull requests that have not completed. +concurrency: + # The concurrency group contains the workflow name and the branch name for pull requests + # or the commit hash for any other events. + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }} + cancel-in-progress: true + # Disable permissions for all available scopes by default. # Any needed permissions should be configured at the job level. permissions: {} @@ -35,160 +44,26 @@ env: PUPPETEER_SKIP_DOWNLOAD: ${{ true }} jobs: - # Runs the PHPUnit tests for WordPress. # - # Performs the following steps: - # - Sets environment variables. - # - Checks out the repository. - # - Sets up Node.js. - # - Sets up PHP. - # - Installs Composer dependencies. - # - Installs npm dependencies - # - Logs general debug information about the runner. - # - Logs Docker debug information (about the Docker installation within the runner). - # - Starts the WordPress Docker container. - # - Logs the running Docker containers. - # - Logs debug information about what's installed within the WordPress Docker containers. - # - Install WordPress within the Docker container. - # - Run the PHPUnit tests as a single site. - # - Ensures version-controlled files are not modified or deleted. - # - Upload the single site code coverage report to Codecov.io. - # - Run the PHPUnit tests as a multisite installation. - # - Ensures version-controlled files are not modified or deleted. - # - Upload the multisite code coverage report to Codecov.io. + # Creates a PHPUnit test jobs for generating code coverage reports. + # test-coverage-report: - name: ${{ matrix.multisite && 'Multisite' || 'Single site' }} report (${{ matrix.format }}) - runs-on: ubuntu-latest + name: ${{ matrix.multisite && 'Multisite' || 'Single site' }} report + uses: WordPress/wordpress-develop/.github/workflows/reusable-phpunit-tests-v3.yml@trunk permissions: contents: read - timeout-minutes: 120 if: ${{ github.repository == 'WordPress/wordpress-develop' }} strategy: fail-fast: false matrix: multisite: [ false, true ] - format: [ clover, html ] - - steps: - - name: Configure environment variables - run: | - echo "PHP_FPM_UID=$(id -u)" >> $GITHUB_ENV - echo "PHP_FPM_GID=$(id -g)" >> $GITHUB_ENV - - - name: Checkout repository - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - with: - show-progress: ${{ runner.debug == '1' && 'true' || 'false' }} - - - name: Set up Node.js - uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # v4.0.4 - with: - node-version-file: '.nvmrc' - cache: npm - - ## - # This allows Composer dependencies to be installed using a single step. - # - # Since the tests are currently run within the Docker containers where the PHP version varies, - # the same PHP version needs to be configured for the action runner machine so that the correct - # dependency versions are installed and cached. - ## - - name: Set up PHP - uses: shivammathur/setup-php@c541c155eee45413f5b09a52248675b1a2575231 # v2.31.1 - with: - php-version: '7.4' - coverage: none - - # Since Composer dependencies are installed using `composer update` and no lock file is in version control, - # passing a custom cache suffix ensures that the cache is flushed at least once per week. - - name: Install Composer dependencies - uses: ramsey/composer-install@57532f8be5bda426838819c5ee9afb8af389d51a # v3.0.0 - with: - custom-cache-suffix: $(/bin/date -u --date='last Mon' "+%F") - - - name: Install npm Dependencies - run: npm ci - - - name: Log debug information - run: | - echo "$GITHUB_REF" - echo "$GITHUB_EVENT_NAME" - npm --version - node --version - curl --version - git --version - composer --version - locale -a - - - name: Docker debug information - run: | - docker -v - - - name: Start Docker environment - run: | - npm run env:start - - - name: Log running Docker containers - run: docker ps -a - - - name: WordPress Docker container debug information - run: | - docker compose run --rm mysql mysql --version - docker compose run --rm php php --version - docker compose run --rm php php -m - docker compose run --rm php php -i - docker compose run --rm php locale -a - - - name: Install WordPress - run: npm run env:install - - - name: Run tests as a single site - if: ${{ ! matrix.multisite }} - run: npm run test:php -- --verbose -c phpunit.xml.dist --coverage-${{ 'html' == matrix.format && 'html' || 'clover' }} wp-code-coverage-single-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} - - - name: Ensure version-controlled files are not modified during the tests - run: git diff --exit-code - - - name: Upload single site report to Codecov - if: ${{ ! matrix.multisite && matrix.format == 'clover' && github.event_name != 'pull_request' }} - uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - file: wp-code-coverage-single-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} - flags: single,php - fail_ci_if_error: true - - - name: Upload single site HTML report as artifact - if: ${{ ! matrix.multisite && matrix.format == 'html' }} - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 - with: - name: wp-code-coverage-single-${{ github.sha }} - path: wp-code-coverage-single-${{ github.sha }} - overwrite: true - - - name: Run tests as a multisite install - if: ${{ matrix.multisite }} - run: npm run test:php -- --verbose -c tests/phpunit/multisite.xml --coverage-${{ 'html' == matrix.format && 'html' || 'clover' }} wp-code-coverage-multisite-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} - - - name: Ensure version-controlled files are not modified during the tests - run: git diff --exit-code - - - name: Upload multisite report to Codecov - if: ${{ matrix.multisite && matrix.format == 'clover' && github.event_name != 'pull_request' }} - uses: codecov/codecov-action@b9fd7d16f6d7d1b5d2bec1a2887e65ceed900238 # v4.6.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - file: wp-code-coverage-multisite-${{ github.sha }}${{ 'clover' == matrix.format && '.xml' || '' }} - flags: multisite,php - fail_ci_if_error: true - - - name: Upload multisite HTML report as artifact - if: ${{ matrix.multisite && matrix.format == 'html' }} - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 - with: - name: wp-code-coverage-multisite-${{ github.sha }} - path: wp-code-coverage-multisite-${{ github.sha }} - overwrite: true + coverage-report: [ true ] + with: + php: '8.3' + multisite: ${{ matrix.multisite }} + coverage-report: ${{ matrix.coverage-report }} + secrets: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} slack-notifications: name: Slack Notifications diff --git a/.github/workflows/test-old-branches.yml b/.github/workflows/test-old-branches.yml index d6a9b94c3d6de..be554bdc149dc 100644 --- a/.github/workflows/test-old-branches.yml +++ b/.github/workflows/test-old-branches.yml @@ -18,7 +18,7 @@ on: permissions: {} env: - CURRENTLY_SUPPORTED_BRANCH: '6.6' + CURRENTLY_SUPPORTED_BRANCH: '6.7' jobs: dispatch-workflows-for-old-branches: @@ -38,12 +38,14 @@ jobs: 'test-build-processes.yml' ] branch: [ - '6.6', '6.5', '6.4', '6.3', '6.2', '6.1','6.0', + '6.7', '6.6', '6.5', '6.4', '6.3', '6.2', '6.1','6.0', '5.9', '5.8', '5.7', '5.6', '5.5', '5.4', '5.3', '5.2', '5.1', '5.0', '4.9', '4.8', '4.7', '4.6', '4.5', '4.4', '4.3', '4.2', '4.1' ] include: # PHP Compatibility testing was introduced in 5.5. + - branch: '6.7' + workflow: 'php-compatibility.yml' - branch: '6.6' workflow: 'php-compatibility.yml' - branch: '6.5' @@ -72,6 +74,8 @@ jobs: # End-to-end testing was introduced in 5.3 but was later removed as there were no meaningful assertions. # Starting in 5.8 with #52905, some additional tests with real assertions were introduced. # Branches 5.8 and newer should be tested to confirm no regressions are introduced. + - branch: '6.7' + workflow: 'end-to-end-tests.yml' - branch: '6.6' workflow: 'end-to-end-tests.yml' - branch: '6.5' @@ -94,6 +98,8 @@ jobs: # Performance testing was introduced in 6.2 using Puppeteer but was overhauled to use Playwright instead in 6.4. # Since the workflow frequently failed for 6.2 and 6.3 due to the flaky nature of the Puppeteer tests, # the workflow was removed from those two branches. + - branch: '6.7' + workflow: 'performance.yml' - branch: '6.6' workflow: 'performance.yml' - branch: '6.5' diff --git a/.github/workflows/upgrade-testing.yml b/.github/workflows/upgrade-testing.yml index 85bd45b5a4eb4..bfa94f3874e08 100644 --- a/.github/workflows/upgrade-testing.yml +++ b/.github/workflows/upgrade-testing.yml @@ -1,3 +1,6 @@ +# Confirms that updating WordPress using WP-CLI works successfully. +# +# This workflow is not meant to test wordpress-develop checkouts, but rather tagged versions officially available on WordPress.org. name: Upgrade Tests on: @@ -7,12 +10,12 @@ on: # Always test the workflow after it's updated. paths: - '.github/workflows/upgrade-testing.yml' - - '.github/workflows/upgrade-testing-run.yml' + - '.github/workflows/reusable-upgrade-testing.yml' pull_request: # Always test the workflow when changes are suggested. paths: - '.github/workflows/upgrade-testing.yml' - - '.github/workflows/upgrade-testing-run.yml' + - '.github/workflows/reusable-upgrade-testing.yml' workflow_dispatch: inputs: new-version: @@ -31,9 +34,28 @@ concurrency: # Any needed permissions should be configured at the job level. permissions: {} +# Because the number of jobs spawned can quickly balloon out of control, the following methodology is applied when +# building out the matrix below: +# +# - The last two releases of WordPress are tested against all PHP/MySQL LTS version combinations and the most recent +# innovation release. +# - The next 6 oldest versions of WordPress are tested against both the oldest and newest releases of PHP currently +# supported for both PHP 7 & 8 along with the oldest and newest MySQL LTS versions currently supported (no innovation +# releases). At the current 3 releases per year pace, this accounts for 2 additional years worth of releases. +# - Of the remaining versions of WordPress still receiving security updates, only test the ones where the database +# version was updated since the previous major release. +# - The oldest version of WordPress receiving security updates should always be tested against the same combinations as +# detailed for the last two releases. + +# Notes about chosen MySQL versions: +# - Only the most recent innovation release should be included in testing. +# - Even though MySQL >= 5.5.5 is currently supported, there are no 5.5.x Docker containers available that work on +# modern architectures. +# - 5.6.x Docker containers are available and work, but 5.6 only accounts for ~2.3% of installs as of 12/6/2024.defaults: +# - 5.7.x accounts for ~20% of installs, so this is used below instead. jobs: - # Spawns upgrade testing from WordPress 6.x versions with MySQL. - upgrade-tests-wp-6x-mysql: + # Tests the full list of PHP/MySQL combinations for the last two versions of WordPress. + upgrade-tests-last-two-releases: name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} @@ -45,9 +67,51 @@ jobs: os: [ 'ubuntu-latest' ] php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0' ] - wp: [ '6.0', '6.1', '6.2', '6.3', '6.4', '6.5', '6.6' ] + db-version: [ '5.7', '8.0', '8.4', '9.1' ] + wp: [ '6.6', '6.7' ] multisite: [ false, true ] + + exclude: + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3 + - php: '7.2' + db-version: '9.1' + - php: '7.3' + db-version: '9.1' + with: + os: ${{ matrix.os }} + php: ${{ matrix.php }} + db-type: ${{ matrix.db-type }} + db-version: ${{ matrix.db-version }} + wp: ${{ matrix.wp }} + new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} + multisite: ${{ matrix.multisite }} + + # Tests the remaining 6.x releases on the oldest and newest supported versions of PHP 7 & 8. + upgrade-tests-wp-6x-mysql: + name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} + uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk + if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} + permissions: + contents: read + strategy: + fail-fast: false + matrix: + os: [ 'ubuntu-latest' ] + php: [ '7.2', '7.4', '8.0', '8.4' ] + db-type: [ 'mysql' ] + db-version: [ '5.7', '8.4' ] + wp: [ '6.0', '6.1', '6.2', '6.3', '6.4', '6.5' ] + multisite: [ false, true ] + + exclude: + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -57,7 +121,7 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} - # Spawns upgrade testing from WordPress 5.x versions on PHP 7.x with MySQL. + # Tests 5.x releases where the WordPress database version changed on the oldest and newest supported versions of PHP 7. upgrade-tests-wp-5x-php-7x-mysql: name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk @@ -66,11 +130,17 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-latest' ] - php: [ '7.2', '7.3', '7.4' ] + php: [ '7.2', '7.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0' ] - wp: [ '5.0', '5.1', '5.2', '5.3', '5.4', '5.5', '5.6', '5.7', '5.8', '5.9' ] + db-version: [ '5.7', '8.4' ] + wp: [ '5.0', '5.1', '5.3', '5.4', '5.5', '5.6', '5.9' ] multisite: [ false, true ] + + exclude: + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -80,7 +150,7 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} - # Spawns upgrade testing from WordPress 5.x versions on PHP 8.x with MySQL. + # Tests 5.x releases where the WordPress database version changed on the oldest and newest supported versions of PHP 8. # # WordPress 5.0-5.2 are excluded from PHP 8+ testing because of the following fatal errors: # - Use of __autoload(). @@ -93,10 +163,10 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-latest' ] - php: [ '8.0', '8.1', '8.2', '8.3', '8.4' ] + php: [ '8.0', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0' ] - wp: [ '5.3', '5.4', '5.5', '5.6', '5.7', '5.8', '5.9' ] + db-version: [ '5.7', '8.4' ] + wp: [ '5.3', '5.4', '5.5', '5.6', '5.9' ] multisite: [ false, true ] with: os: ${{ matrix.os }} @@ -107,7 +177,9 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} - # Spawns upgrade testing from WordPress 4.x versions on PHP 7.x with MySQL. + # Tests 4.x releases where the WordPress database version changed on the oldest and newest supported versions of PHP 7. + # + # The oldest version of WordPress receiving security updates should always be tested. upgrade-tests-wp-4x-php-7x-mysql: name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk @@ -116,11 +188,17 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-latest' ] - php: [ '7.2', '7.3', '7.4' ] + php: [ '7.2', '7.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0' ] - wp: [ '4.1', '4.2', '4.3', '4.4', '4.5', '4.6', '4.7', '4.8', '4.9' ] + db-version: [ '5.7', '8.4' ] + wp: [ '4.1', '4.2', '4.3', '4.4', '4.5', '4.6', '4.7' ] multisite: [ false, true ] + + exclude: + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' with: os: ${{ matrix.os }} php: ${{ matrix.php }} @@ -130,7 +208,9 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} - # Spawns upgrade testing from WordPress 4.x versions on PHP 8.x with MySQL. + # Tests 4.x releases where the WordPress database version changed on the oldest and newest supported versions of PHP 8. + # + # The oldest version of WordPress receiving security updates should always be tested. # # WordPress 4.6-4.9 are excluded from PHP 8+ testing because of the following fatal errors: # - Use of __autoload(). @@ -143,9 +223,9 @@ jobs: fail-fast: false matrix: os: [ 'ubuntu-latest' ] - php: [ '8.0', '8.1', '8.2', '8.3', '8.4' ] + php: [ '8.0', '8.4' ] db-type: [ 'mysql' ] - db-version: [ '5.7', '8.0' ] + db-version: [ '5.7', '8.4' ] wp: [ '4.1', '4.2', '4.3', '4.4', '4.5' ] multisite: [ false, true ] with: @@ -157,13 +237,48 @@ jobs: new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} multisite: ${{ matrix.multisite }} + # The oldest version of WordPress receiving security updates should always be tested against + # the full list of PHP/MySQL combinations. + upgrade-tests-oldest-wp-mysql: + name: ${{ matrix.wp }} to ${{ inputs.new-version && inputs.new-version || 'latest' }} + uses: WordPress/wordpress-develop/.github/workflows/reusable-upgrade-testing.yml@trunk + if: ${{ github.repository == 'WordPress/wordpress-develop' || github.event_name == 'pull_request' }} + strategy: + fail-fast: false + matrix: + os: [ 'ubuntu-latest' ] + php: [ '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3', '8.4' ] + db-type: [ 'mysql' ] + db-version: [ '5.7', '8.0', '8.4', '9.1' ] + wp: [ '4.1' ] + multisite: [ false, true ] + + exclude: + - php: '7.2' + db-version: '8.4' + - php: '7.3' + db-version: '8.4' + # MySQL 9.0+ will not work on PHP 7.2 & 7.3 + - php: '7.2' + db-version: '9.1' + - php: '7.3' + db-version: '9.1' + with: + os: ${{ matrix.os }} + php: ${{ matrix.php }} + db-type: ${{ matrix.db-type }} + db-version: ${{ matrix.db-version }} + wp: ${{ matrix.wp }} + new-version: ${{ inputs.new-version && inputs.new-version || 'latest' }} + multisite: ${{ matrix.multisite }} + slack-notifications: name: Slack Notifications uses: WordPress/wordpress-develop/.github/workflows/slack-notifications.yml@trunk permissions: actions: read contents: read - needs: [ upgrade-tests-wp-6x-mysql, upgrade-tests-wp-5x-php-7x-mysql, upgrade-tests-wp-5x-php-8x-mysql, upgrade-tests-wp-4x-php-7x-mysql, upgrade-tests-wp-4x-php-8x-mysql ] + needs: [ upgrade-tests-last-two-releases, upgrade-tests-wp-6x-mysql, upgrade-tests-wp-5x-php-7x-mysql, upgrade-tests-wp-5x-php-8x-mysql, upgrade-tests-wp-4x-php-7x-mysql, upgrade-tests-wp-4x-php-8x-mysql, upgrade-tests-oldest-wp-mysql ] if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }} with: calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }} diff --git a/.gitignore b/.gitignore index 81f87c18056a3..229b3a269394b 100644 --- a/.gitignore +++ b/.gitignore @@ -42,6 +42,7 @@ wp-tests-config.php /packagehash.txt /artifacts /setup.log +/coverage # Files and folders that get created in wp-content /src/wp-content/blogs.dir diff --git a/.version-support-mysql.json b/.version-support-mysql.json index bd2bfac03233e..f6cffac449cae 100644 --- a/.version-support-mysql.json +++ b/.version-support-mysql.json @@ -1,8 +1,14 @@ { + "6-8": [ + "9.0", + "8.4", + "8.0", + "5.7", + "5.6", + "5.5" + ], "6-7": [ - "8.3", - "8.2", - "8.1", + "8.4", "8.0", "5.7", "5.6", diff --git a/.version-support-php.json b/.version-support-php.json index 720afc2cc0bcb..e785c75126c70 100644 --- a/.version-support-php.json +++ b/.version-support-php.json @@ -1,4 +1,14 @@ { + "6-8": [ + "7.2", + "7.3", + "7.4", + "8.0", + "8.1", + "8.2", + "8.3", + "8.4" + ], "6-7": [ "7.2", "7.3", diff --git a/Gruntfile.js b/Gruntfile.js index 70f826ac0e33c..4f8a3d6aa2e76 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1066,7 +1066,7 @@ module.exports = function(grunt) { files = spawn( 'gh', [ 'api', 'graphql', '-f', query] ); if ( 0 !== files.status ) { - grunt.fatal( 'Unable to fetch Twemoji file list' ); + grunt.fatal( files.stderr.toString() ); } try { diff --git a/README.md b/README.md index f1a12dda6952a..fc8c00f6821af 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,19 @@ npm run test:php -- --filter npm run test:php -- --group ``` +#### Generating a code coverage report +PHP code coverage reports are [generated daily](https://github.com/WordPress/wordpress-develop/actions/workflows/test-coverage.yml) and [submitted to Codecov.io](https://app.codecov.io/gh/WordPress/wordpress-develop). + +After the local Docker environment has [been installed and started](#to-start-the-development-environment-for-the-first-time), the following command can be used to generate a code coverage report. + +``` +npm run test:coverage +``` + +The command will generate three coverage reports in HTML, PHP, and text formats, saving them in the `coverage` folder. + +**Note:** xDebug is required to generate a code coverage report, which can slow down PHPUnit significantly. Passing selection-based options such as `--group` or `--filter` can decrease the overall time required but will result in an incomplete report. + #### To restart the development environment You may want to restart the environment if you've made changes to the configuration in the `docker-compose.yml` or `.env` files. Restart the environment with: @@ -126,11 +139,14 @@ The development environment can be reset. This will destroy the database and att npm run env:reset ``` -### Apple Silicone machines and old MySQL versions +### Apple Silicon machines and old MySQL/MariaDB versions + +Older MySQL and MariaDB Docker images do not support Apple Silicon processors (M1, M2, etc.). This is true for: -The MySQL Docker images do not support Apple Silicone processors (M1, M2, etc.) for MySQL versions 5.7 and earlier. +- MySQL versions 5.7 and earlier +- MariaDB 5.5 -When using MySQL <= 5.7 on an Apple Silicone machine, you must create a `docker-compose.override.yml` file with the following contents: +When using these versions on an Apple Silicon machine, you must create a `docker-compose.override.yml` file with the following contents: ``` services: diff --git a/SECURITY.md b/SECURITY.md index 32e8273dcbb4c..fa12927e3c550 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -10,6 +10,7 @@ Full details of the WordPress Security Policy and the list of covered projects a | Version | Supported | |---------| --------- | +| 6.7.x | Yes | | 6.6.x | Yes | | 6.5.x | Yes | | 6.4.x | Yes | diff --git a/docker-compose.yml b/docker-compose.yml index 6cd25afb638ea..ec462c8a24c5c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -79,10 +79,10 @@ services: - mysql:/var/lib/mysql # For compatibility with PHP versions that don't support the caching_sha2_password auth plugin used in MySQL 8.0. - command: --default-authentication-plugin=mysql_native_password + command: ${LOCAL_DB_AUTH_OPTION-} healthcheck: - test: [ "CMD-SHELL", "if [ \"$LOCAL_DB_TYPE\" = \"mariadb\" ]; then mariadb-admin ping -h localhost; else mysqladmin ping -h localhost; fi" ] + test: [ "CMD-SHELL", "if [ \"$LOCAL_DB_TYPE\" = \"mariadb\" ]; then case \"$LOCAL_DB_VERSION\" in 5.5|10.0|10.1|10.2|10.3) mysqladmin ping -h localhost || exit $$?;; *) mariadb-admin ping -h localhost || exit $$?;; esac; else mysqladmin ping -h localhost || exit $$?; fi" ] timeout: 5s interval: 5s retries: 10 diff --git a/package-lock.json b/package-lock.json index 3438275093a0c..ed9e1b4410f35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "WordPress", - "version": "6.7.0", + "version": "6.8.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "WordPress", - "version": "6.7.0", + "version": "6.8.0", "license": "GPL-2.0-or-later", "dependencies": { "@wordpress/a11y": "4.8.2", @@ -14,58 +14,58 @@ "@wordpress/api-fetch": "7.8.2", "@wordpress/autop": "4.8.1", "@wordpress/blob": "4.8.1", - "@wordpress/block-directory": "5.8.9", - "@wordpress/block-editor": "14.3.7", - "@wordpress/block-library": "9.8.8", + "@wordpress/block-directory": "5.8.18", + "@wordpress/block-editor": "14.3.15", + "@wordpress/block-library": "9.8.16", "@wordpress/block-serialization-default-parser": "5.8.1", "@wordpress/blocks": "13.8.5", - "@wordpress/commands": "1.8.7", - "@wordpress/components": "28.8.7", + "@wordpress/commands": "1.8.11", + "@wordpress/components": "28.8.11", "@wordpress/compose": "7.8.3", - "@wordpress/core-commands": "1.8.7", - "@wordpress/core-data": "7.8.7", - "@wordpress/customize-widgets": "5.8.8", + "@wordpress/core-commands": "1.8.15", + "@wordpress/core-data": "7.8.15", + "@wordpress/customize-widgets": "5.8.16", "@wordpress/data": "10.8.3", "@wordpress/data-controls": "4.8.3", - "@wordpress/dataviews": "4.4.7", + "@wordpress/dataviews": "4.4.11", "@wordpress/date": "5.8.2", "@wordpress/deprecated": "4.8.2", "@wordpress/dom": "4.8.2", "@wordpress/dom-ready": "4.8.1", - "@wordpress/edit-post": "8.8.9", - "@wordpress/edit-site": "6.8.9", - "@wordpress/edit-widgets": "6.8.8", - "@wordpress/editor": "14.8.9", + "@wordpress/edit-post": "8.8.18", + "@wordpress/edit-site": "6.8.18", + "@wordpress/edit-widgets": "6.8.16", + "@wordpress/editor": "14.8.18", "@wordpress/element": "6.8.1", "@wordpress/escape-html": "3.8.1", - "@wordpress/fields": "0.0.8", - "@wordpress/format-library": "5.8.7", + "@wordpress/fields": "0.0.16", + "@wordpress/format-library": "5.8.15", "@wordpress/hooks": "4.8.2", "@wordpress/html-entities": "4.8.1", "@wordpress/i18n": "5.8.2", "@wordpress/icons": "10.8.2", "@wordpress/interactivity": "6.8.5", "@wordpress/interactivity-router": "2.8.6", - "@wordpress/interface": "6.8.7", + "@wordpress/interface": "6.8.11", "@wordpress/is-shallow-equal": "5.8.1", "@wordpress/keyboard-shortcuts": "5.8.3", "@wordpress/keycodes": "4.8.2", - "@wordpress/list-reusable-blocks": "5.8.7", + "@wordpress/list-reusable-blocks": "5.8.11", "@wordpress/media-utils": "5.8.2", "@wordpress/notices": "5.8.3", - "@wordpress/nux": "9.8.7", - "@wordpress/patterns": "2.8.7", - "@wordpress/plugins": "7.8.7", - "@wordpress/preferences": "4.8.7", + "@wordpress/nux": "9.8.11", + "@wordpress/patterns": "2.8.15", + "@wordpress/plugins": "7.8.11", + "@wordpress/preferences": "4.8.11", "@wordpress/preferences-persistence": "2.8.2", "@wordpress/primitives": "4.8.1", "@wordpress/priority-queue": "3.8.1", "@wordpress/private-apis": "1.8.1", "@wordpress/redux-routine": "5.8.1", - "@wordpress/reusable-blocks": "5.8.7", + "@wordpress/reusable-blocks": "5.8.15", "@wordpress/rich-text": "7.8.3", "@wordpress/router": "1.8.1", - "@wordpress/server-side-render": "5.8.7", + "@wordpress/server-side-render": "5.8.11", "@wordpress/shortcode": "4.8.1", "@wordpress/style-engine": "2.8.1", "@wordpress/sync": "1.8.1", @@ -74,7 +74,7 @@ "@wordpress/url": "4.8.1", "@wordpress/viewport": "6.8.3", "@wordpress/warning": "3.8.1", - "@wordpress/widgets": "4.8.7", + "@wordpress/widgets": "4.8.15", "@wordpress/wordcount": "4.8.1", "backbone": "1.6.0", "clipboard": "2.0.11", @@ -116,8 +116,8 @@ "check-node-version": "4.2.1", "copy-webpack-plugin": "12.0.2", "cssnano": "7.0.6", - "dotenv": "16.4.5", - "dotenv-expand": "11.0.6", + "dotenv": "16.4.7", + "dotenv-expand": "12.0.1", "grunt": "1.6.1", "grunt-banner": "^0.6.0", "grunt-contrib-clean": "~2.0.1", @@ -140,19 +140,19 @@ "ink-docstrap": "1.3.2", "install-changed": "1.1.0", "matchdep": "~2.0.0", - "postcss": "8.4.47", + "postcss": "8.4.49", "prettier": "npm:wp-prettier@2.6.2", - "qunit": "~2.22.0", + "qunit": "~2.23.1", "react-refresh": "0.14.0", - "sass": "1.79.4", + "sass": "1.79.6", "sinon": "16.1.3", "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", - "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.17.4", - "uuid": "9.0.1", + "terser-webpack-plugin": "5.3.11", + "uglify-js": "^3.19.3", + "uuid": "11.0.3", "wait-on": "8.0.1", - "webpack": "5.90.2", + "webpack": "5.97.1", "webpack-livereload-plugin": "3.0.2" }, "engines": { @@ -3589,19 +3589,20 @@ } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -3719,6 +3720,378 @@ "node": ">= 8" } }, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/watcher/node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@parcel/watcher/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@parcel/watcher/node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@parcel/watcher/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/@pkgr/core": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", @@ -5392,30 +5765,33 @@ } }, "node_modules/@types/eslint": { - "version": "8.21.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.0.tgz", - "integrity": "sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/express": { "version": "4.17.21", @@ -6064,148 +6440,163 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", - "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", - "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", - "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", - "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", - "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", - "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", - "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", - "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -6257,6 +6648,7 @@ "version": "4.8.2", "resolved": "https://registry.npmjs.org/@wordpress/a11y/-/a11y-4.8.2.tgz", "integrity": "sha512-eILr2ZYK5FYSlx18rnP06qKyPELxEyDcnosSOsjskPGw5gYT01sUf0fkAebliuG88VppT+bgI008TRo3dvtZzQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/dom-ready": "^4.8.1", @@ -6271,6 +6663,7 @@ "version": "3.8.3", "resolved": "https://registry.npmjs.org/@wordpress/annotations/-/annotations-3.8.3.tgz", "integrity": "sha512-ihDxDnDDX73j7VGZutx0XBGelMf9cZmfh3L6hNW5CFacMTaH9+FNAY4+2I55N+fWOE7h1ePlHeL5DXvz38xsug==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/data": "^10.8.3", @@ -6287,10 +6680,24 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/annotations/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/api-fetch": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/@wordpress/api-fetch/-/api-fetch-7.8.2.tgz", "integrity": "sha512-6jiodZD4+5lIelb/E6FHMa6xuldcoIkQ5vWtvHpoB30++7eOgYi0tl5b1NlzGqfReIcl9oO+Wwp5V9mRE+mJoA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/i18n": "^5.8.2", @@ -6305,6 +6712,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/autop/-/autop-4.8.1.tgz", "integrity": "sha512-/ah4oBIRGMZlxBBPiD6R5uamCPEXTzmsJ0iceDJxMHc5KvNcy59oHNCirD5yiRLORk8RrujUczIGfglpUjGh2Q==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6318,6 +6726,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/babel-preset-default/-/babel-preset-default-8.8.2.tgz", "integrity": "sha512-XhIpSw6d8GeaBe+gQ25nck01+Q3UiVQgih/yBCFWNtzB2qp/AB7195lHGxbuAYUO9RM1eXsf8kVJV2caAb4WnA==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@babel/core": "^7.16.0", "@babel/plugin-transform-react-jsx": "^7.16.0", @@ -6351,6 +6760,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/blob/-/blob-4.8.1.tgz", "integrity": "sha512-fMLWmum+B8aZi5w8Tie7mw+LEP/FF6RXVMG8AH4GwtXYYD2b3WgjbF7I4p6HYOaz3kAEnlJNo55qqLT2tFogww==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6360,27 +6770,28 @@ } }, "node_modules/@wordpress/block-directory": { - "version": "5.8.9", - "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.8.9.tgz", - "integrity": "sha512-WtjHpqWqXnk1eRIqZRARv43Ns+0mD/PTbHd2Dd3I76UoBhwcxx31Uvfx0TN05qAHemvyMXV4L9m2p52D6ZM7dw==", + "version": "5.8.18", + "resolved": "https://registry.npmjs.org/@wordpress/block-directory/-/block-directory-5.8.18.tgz", + "integrity": "sha512-lYZDKI/IFMymfi3MxFfvpBMx6nhqAOEX+IXZvpKPiHR62LL+MXBoeOdiSZYKysfztFyPH7Ism43c1TeY+fQnIg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", "@wordpress/api-fetch": "^7.8.2", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", - "@wordpress/editor": "^14.8.9", + "@wordpress/editor": "^14.8.18", "@wordpress/element": "^6.8.1", "@wordpress/hooks": "^4.8.2", "@wordpress/html-entities": "^4.8.1", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/plugins": "^7.8.7", + "@wordpress/plugins": "^7.8.11", "@wordpress/private-apis": "^1.8.1", "@wordpress/url": "^4.8.1", "change-case": "^4.1.2", @@ -6396,9 +6807,10 @@ } }, "node_modules/@wordpress/block-editor": { - "version": "14.3.7", - "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-14.3.7.tgz", - "integrity": "sha512-OINjD9lo9V82ds3VeqoSAMtwV49PaHB7f6Lnv+vNNNNP863krClyQczlfu2ge73Y1OopizWlGtAYTxWuN8Jx5A==", + "version": "14.3.15", + "resolved": "https://registry.npmjs.org/@wordpress/block-editor/-/block-editor-14.3.15.tgz", + "integrity": "sha512-5cFdYZMXsOlzWzbzLSB34wT3aQfl2WEKw83NA9/A4IAvZ7rJXdVJx0H2ZP7itmU/Rcj2cxPC152rfit9y4/+ww==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@emotion/react": "^11.7.1", @@ -6409,8 +6821,8 @@ "@wordpress/blob": "^4.8.1", "@wordpress/block-serialization-default-parser": "^5.8.1", "@wordpress/blocks": "^13.8.5", - "@wordpress/commands": "^1.8.7", - "@wordpress/components": "^28.8.7", + "@wordpress/commands": "^1.8.11", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/date": "^5.8.2", @@ -6426,7 +6838,7 @@ "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/preferences": "^4.8.7", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", "@wordpress/rich-text": "^7.8.3", "@wordpress/style-engine": "^2.8.1", @@ -6459,20 +6871,21 @@ } }, "node_modules/@wordpress/block-library": { - "version": "9.8.8", - "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.8.8.tgz", - "integrity": "sha512-FDNslrUH+Fkthqb8HeeHtb2C8MtIhksXzmsm6q2Qdwsj1IJlySlNABH+W2Ji0OIu0qWOfcKKBj6hWV8tqhowbw==", + "version": "9.8.16", + "resolved": "https://registry.npmjs.org/@wordpress/block-library/-/block-library-9.8.16.tgz", + "integrity": "sha512-1Vo36U439E856KR22n71oHhXTJ7e7iRS/4HDWEem1NY1iSFiBK3RBoIDLv7emVExSXhdRill7RjPGmRMeiEvJg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", "@wordpress/api-fetch": "^7.8.2", "@wordpress/autop": "^4.8.1", "@wordpress/blob": "^4.8.1", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/date": "^5.8.2", "@wordpress/deprecated": "^4.8.2", @@ -6488,12 +6901,12 @@ "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/patterns": "^2.8.7", + "@wordpress/patterns": "^2.8.15", "@wordpress/primitives": "^4.8.1", "@wordpress/private-apis": "^1.8.1", - "@wordpress/reusable-blocks": "^5.8.7", + "@wordpress/reusable-blocks": "^5.8.15", "@wordpress/rich-text": "^7.8.3", - "@wordpress/server-side-render": "^5.8.7", + "@wordpress/server-side-render": "^5.8.11", "@wordpress/url": "^4.8.1", "@wordpress/viewport": "^6.8.3", "@wordpress/wordcount": "^4.8.1", @@ -6516,10 +6929,24 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/block-library/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/block-serialization-default-parser": { "version": "5.8.1", "resolved": "https://registry.npmjs.org/@wordpress/block-serialization-default-parser/-/block-serialization-default-parser-5.8.1.tgz", "integrity": "sha512-SmbMiM/KTh9veMcujL+t375yMR1JZlIzbVEIk6NdiGV+7pvtenUe4Av0tr+0QaINmgo3MJmc4Y3csZrKFlRr+w==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6532,6 +6959,7 @@ "version": "13.8.5", "resolved": "https://registry.npmjs.org/@wordpress/blocks/-/blocks-13.8.5.tgz", "integrity": "sha512-KE0bbN370G3tA/7Oaugk0IRLaG3p06sEnfbbDvoRSyiPyxQsyYb53i921vuteHtzQ+3DEjtDzrku/bsKOn81Tg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/autop": "^4.8.1", @@ -6569,6 +6997,19 @@ "react": "^18.0.0" } }, + "node_modules/@wordpress/blocks/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/browserslist-config": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/@wordpress/browserslist-config/-/browserslist-config-6.8.1.tgz", @@ -6580,12 +7021,13 @@ } }, "node_modules/@wordpress/commands": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.8.7.tgz", - "integrity": "sha512-ma4pFOv1/esloo+IHKUuk6OZO6nwvDz9lGUpLIlpu6c5C2PIpD/EDDK1X4cifgzMFvxP9l1Sr3IcAQYDiUqXrw==", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/commands/-/commands-1.8.11.tgz", + "integrity": "sha512-CKnzWwSKO3kckqV58JXA0taU2JgIpEkVxX8xUOe3aI1isaOFjF+iwshuhNgWcs3sAiuUK0s4aQWi3ZqGhmirzA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", "@wordpress/i18n": "^5.8.2", @@ -6605,9 +7047,10 @@ } }, "node_modules/@wordpress/components": { - "version": "28.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.8.7.tgz", - "integrity": "sha512-qsbAshh8FU9FYGsOi6ZGEE92lOCKda5EucEZp+kUi4jNyO9+T9+Hf7wXYWTIMdnfhrhVJJywJYIdcVbIXtJWcQ==", + "version": "28.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/components/-/components-28.8.11.tgz", + "integrity": "sha512-IfSSeFUcbBS1eS5fq1ShPIW2JEU9OJiKrkZ8Ae3FpqTfYbJppVP4+cpK+kvBWj5PLyg+EBHv4W5dx9tMUKsKRg==", + "license": "GPL-2.0-or-later", "dependencies": { "@ariakit/react": "^0.4.10", "@babel/runtime": "^7.16.0", @@ -6664,10 +7107,24 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/components/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/compose": { "version": "7.8.3", "resolved": "https://registry.npmjs.org/@wordpress/compose/-/compose-7.8.3.tgz", "integrity": "sha512-knHfFz1/rzFr69d2lDIFspXYTn56Fdd6+4Enc9QhHfkICpwi59jQCXqtNguCB2O8FdL2FNpK1YSgx1FrTo37dA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@types/mousetrap": "^1.6.8", @@ -6692,15 +7149,16 @@ } }, "node_modules/@wordpress/core-commands": { - "version": "1.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.8.7.tgz", - "integrity": "sha512-RX1LEUR91+yuRKGBWwFIMZwuFqEyHqHeJZS2JjhSTMbdz/2mq0Gto5kaS81YpJE48rUGEiElMSNDVII/BOskaw==", + "version": "1.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/core-commands/-/core-commands-1.8.15.tgz", + "integrity": "sha512-1+Pa1V6Tsc1bFFHzbAfaqSv+w58jKQ+3qqdlcmGWdkYJz8VLE6kaKG9IrgT+xm0ricGpQ6dy6T2h6BXRWT5LgQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/commands": "^1.8.7", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/commands": "^1.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", "@wordpress/html-entities": "^4.8.1", @@ -6721,13 +7179,14 @@ } }, "node_modules/@wordpress/core-data": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.8.7.tgz", - "integrity": "sha512-agbLylqVyIetyEtxhypV/tH3BhJUXky0BseLrunVicCNfniLs3TGo6v4qGPjVDAyE9W+hTpydQohp4lEDgvfHg==", + "version": "7.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/core-data/-/core-data-7.8.15.tgz", + "integrity": "sha512-fh3/Q8UF2skuSAgERXDhQdc59yA+WxE1YweIFbW1Gh2V80T9XrkX7GHQBuAXcEScdcIsE64fZLYJkVhrrWl0jA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", @@ -6757,32 +7216,46 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/core-data/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/customize-widgets": { - "version": "5.8.8", - "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.8.8.tgz", - "integrity": "sha512-CWFPMplq7Ts+gZWaH6GMj+/w5j/n+tjX8SrcZWiMRp7psblWItEuw1KH1CHcXzZL8ieIB9TsdCkLTAzOyAA8jA==", + "version": "5.8.16", + "resolved": "https://registry.npmjs.org/@wordpress/customize-widgets/-/customize-widgets-5.8.16.tgz", + "integrity": "sha512-Rl3n+55RTwHfTb8MyjAJc7/y61w+rOXMubst+gpOa6Uw5EN/rq61evCopLD86tVHMesWflQvC7jDDr6MwTcmeA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/block-library": "^9.8.8", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/block-library": "^9.8.16", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/dom": "^4.8.2", "@wordpress/element": "^6.8.1", "@wordpress/hooks": "^4.8.2", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", - "@wordpress/interface": "^6.8.7", + "@wordpress/interface": "^6.8.11", "@wordpress/is-shallow-equal": "^5.8.1", "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/media-utils": "^5.8.2", - "@wordpress/preferences": "^4.8.7", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", - "@wordpress/widgets": "^4.8.7", + "@wordpress/widgets": "^4.8.15", "clsx": "^2.1.1", "fast-deep-equal": "^3.1.3" }, @@ -6799,6 +7272,7 @@ "version": "10.8.3", "resolved": "https://registry.npmjs.org/@wordpress/data/-/data-10.8.3.tgz", "integrity": "sha512-JunqBEVVwJJz45N8JTZNh9WHFn857SUtbp7Efp55oesH/g3ejLMuNu6Ewf9/qEEGQut8VeVQ7yGhl+GQDu9u+w==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/compose": "^7.8.3", @@ -6828,6 +7302,7 @@ "version": "4.8.3", "resolved": "https://registry.npmjs.org/@wordpress/data-controls/-/data-controls-4.8.3.tgz", "integrity": "sha512-uh7ECbGDU3lFIUK+LiN0GHFRlWzgvsT+RXZeEDWE22gtbrksdGOQV8Ufz+/iSUnMaOA41r0Yz90lROfUL4mdFQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", @@ -6843,13 +7318,14 @@ } }, "node_modules/@wordpress/dataviews": { - "version": "4.4.7", - "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-4.4.7.tgz", - "integrity": "sha512-qj2QPR78eGtV3Bz3aHPHmGiCAQRkXMstu+D8UTuXl0QR+qW87DSigZFZJ+w4ts1OZjoIbRohbgfLYSSsFXWLFg==", + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/@wordpress/dataviews/-/dataviews-4.4.11.tgz", + "integrity": "sha512-P9E79dWb4y27eAo/H1M9lQ3l5tKi/SMm4hmoZsEBMd5Z8tYzGeFSOJlzzU6gJf0Ue1OIjg0/RO/f3mcZQe6k2A==", + "license": "GPL-2.0-or-later", "dependencies": { "@ariakit/react": "^0.4.10", "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", @@ -6873,6 +7349,7 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/@wordpress/date/-/date-5.8.2.tgz", "integrity": "sha512-ECPE9JXQ0GN+A3ssP+bmEtt122JQnkuXzGOUXfED+kjdmFZ1MgPtyKfXBFDzyW6fPHAwzpSbyFSBXfwxevxWAQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/deprecated": "^4.8.2", @@ -6889,6 +7366,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/dependency-extraction-webpack-plugin/-/dependency-extraction-webpack-plugin-6.8.3.tgz", "integrity": "sha512-2XtMyfX8wacCBK9S808o3NkDdo+qeJgtz6DQhi1nOK6XhIsw/IeSwbZgrTlIzhUk2mQ1N0Y+e3588/dxiS4kBQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "json2php": "^0.0.7" }, @@ -6911,6 +7389,7 @@ "version": "4.8.2", "resolved": "https://registry.npmjs.org/@wordpress/deprecated/-/deprecated-4.8.2.tgz", "integrity": "sha512-AMO0FeqYfIcQRNzAVYDYHZ6ISdfkPHm8Rt8HQOl0Bg7tWX3ocVYnMULUGg/VzgM8AJzAUrfBpwcXZBMF1g4Xpw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/hooks": "^4.8.2" @@ -6924,6 +7403,7 @@ "version": "4.8.2", "resolved": "https://registry.npmjs.org/@wordpress/dom/-/dom-4.8.2.tgz", "integrity": "sha512-5VZooybouKVkQ6W2+ef7AnAYQG54lkUN8+Kzc7ly84+WL13RbrwfE4Bj9/RFE5Ew59XTfHME0+GzE3fpLNiTYA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/deprecated": "^4.8.2" @@ -6937,6 +7417,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/dom-ready/-/dom-ready-4.8.1.tgz", "integrity": "sha512-xVMNpOaLzpZS4HFH5yYE3ToOhpsDpV29PoeDzuki18XA+ZPg6SvQ/TmwggMasnI1PoyAcQWxugXMV+YUFGM8Mg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -6950,6 +7431,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils/-/e2e-test-utils-11.8.2.tgz", "integrity": "sha512-ddpxERmKzUwBejem0tQweNUlyCXLab0qPwHs+bJwGDzrp75WHW29rb9pQvvem2uLvso7Sw0IfVZaO2+hVXPM+g==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", @@ -6973,6 +7455,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/e2e-test-utils-playwright/-/e2e-test-utils-playwright-1.8.1.tgz", "integrity": "sha512-BKp2EpC35/SWJg1h69Q0RP7hlcNoqyuq1UA5CJycph2yuzrfl8+tfKqkrdCYhyLU/MuW6GFh9d92vb2cTYnSOQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "change-case": "^4.1.2", "form-data": "^4.0.0", @@ -7032,25 +7515,26 @@ } }, "node_modules/@wordpress/edit-post": { - "version": "8.8.9", - "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.8.9.tgz", - "integrity": "sha512-f4zraZeZjkJvdAJySzBbA00hKKM6uz6l3VCypFH05XLLXUDbo4/hRusU7z1Xx+OIK5+PeLSj1Jm+irF/z2OghA==", + "version": "8.8.18", + "resolved": "https://registry.npmjs.org/@wordpress/edit-post/-/edit-post-8.8.18.tgz", + "integrity": "sha512-1woHpjt0RM4gKrpevaG1Zh6b2Al0biNrGFrIuAK2S71SasLrQuYzx9z3bAs5acCjXhV7VkLkLpK+ERm59256vQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", "@wordpress/api-fetch": "^7.8.2", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/block-library": "^9.8.8", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/block-library": "^9.8.16", "@wordpress/blocks": "^13.8.5", - "@wordpress/commands": "^1.8.7", - "@wordpress/components": "^28.8.7", + "@wordpress/commands": "^1.8.11", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-commands": "^1.8.7", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-commands": "^1.8.15", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", "@wordpress/dom": "^4.8.2", - "@wordpress/editor": "^14.8.9", + "@wordpress/editor": "^14.8.18", "@wordpress/element": "^6.8.1", "@wordpress/hooks": "^4.8.2", "@wordpress/html-entities": "^4.8.1", @@ -7059,13 +7543,13 @@ "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/plugins": "^7.8.7", - "@wordpress/preferences": "^4.8.7", + "@wordpress/plugins": "^7.8.11", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", "@wordpress/url": "^4.8.1", "@wordpress/viewport": "^6.8.3", "@wordpress/warning": "^3.8.1", - "@wordpress/widgets": "^4.8.7", + "@wordpress/widgets": "^4.8.15", "clsx": "^2.1.1", "memize": "^2.1.0" }, @@ -7079,29 +7563,30 @@ } }, "node_modules/@wordpress/edit-site": { - "version": "6.8.9", - "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.8.9.tgz", - "integrity": "sha512-frMjdMxcgVFTSbyE5/hzhaKEi4Ma0z2EDlR8/fdbZYJq0Oj75mW0GgAmEpZfdMAhklAj3RjgL/Lh9QiXXSVxtQ==", + "version": "6.8.18", + "resolved": "https://registry.npmjs.org/@wordpress/edit-site/-/edit-site-6.8.18.tgz", + "integrity": "sha512-sts/9mPt8u7MJw0+qjbWH1kh39GAT94goVw45FDMQtNB6uNe8HEDe2qoc/ObXATiRtmndEQnteNe+y1Tbbi8Dw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@react-spring/web": "^9.4.5", "@wordpress/a11y": "^4.8.2", "@wordpress/api-fetch": "^7.8.2", "@wordpress/blob": "^4.8.1", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/block-library": "^9.8.8", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/block-library": "^9.8.16", "@wordpress/blocks": "^13.8.5", - "@wordpress/commands": "^1.8.7", - "@wordpress/components": "^28.8.7", + "@wordpress/commands": "^1.8.11", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-commands": "^1.8.7", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-commands": "^1.8.15", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", - "@wordpress/dataviews": "^4.4.7", + "@wordpress/dataviews": "^4.4.11", "@wordpress/date": "^5.8.2", "@wordpress/deprecated": "^4.8.2", "@wordpress/dom": "^4.8.2", - "@wordpress/editor": "^14.8.9", + "@wordpress/editor": "^14.8.18", "@wordpress/element": "^6.8.1", "@wordpress/escape-html": "^3.8.1", "@wordpress/hooks": "^4.8.2", @@ -7111,18 +7596,18 @@ "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/patterns": "^2.8.7", - "@wordpress/plugins": "^7.8.7", - "@wordpress/preferences": "^4.8.7", + "@wordpress/patterns": "^2.8.15", + "@wordpress/plugins": "^7.8.11", + "@wordpress/preferences": "^4.8.11", "@wordpress/primitives": "^4.8.1", "@wordpress/priority-queue": "^3.8.1", "@wordpress/private-apis": "^1.8.1", - "@wordpress/reusable-blocks": "^5.8.7", + "@wordpress/reusable-blocks": "^5.8.15", "@wordpress/router": "^1.8.1", "@wordpress/style-engine": "^2.8.1", "@wordpress/url": "^4.8.1", "@wordpress/viewport": "^6.8.3", - "@wordpress/widgets": "^4.8.7", + "@wordpress/widgets": "^4.8.15", "@wordpress/wordcount": "^4.8.1", "change-case": "^4.1.2", "clsx": "^2.1.1", @@ -7141,18 +7626,19 @@ } }, "node_modules/@wordpress/edit-widgets": { - "version": "6.8.8", - "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.8.8.tgz", - "integrity": "sha512-5b760bZ4ixv/8ieCrT13+Aehvo+tS3rYi6QVkj5duRnhxE6bJnNomACv6Get3klQQhwd7DG7cOHIfzo9dbURdg==", + "version": "6.8.16", + "resolved": "https://registry.npmjs.org/@wordpress/edit-widgets/-/edit-widgets-6.8.16.tgz", + "integrity": "sha512-uMLnmoi2anx3n/EKPHUKvuxYlOzhRIm3j2+BicI8nthR9cxAvXkmC9Z7QdaCgleGaxDQPD61Q0KsuFFHJtQWWQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/block-library": "^9.8.8", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/block-library": "^9.8.16", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", "@wordpress/dom": "^4.8.2", @@ -7160,18 +7646,18 @@ "@wordpress/hooks": "^4.8.2", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", - "@wordpress/interface": "^6.8.7", + "@wordpress/interface": "^6.8.11", "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/media-utils": "^5.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/patterns": "^2.8.7", - "@wordpress/plugins": "^7.8.7", - "@wordpress/preferences": "^4.8.7", + "@wordpress/patterns": "^2.8.15", + "@wordpress/plugins": "^7.8.11", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", - "@wordpress/reusable-blocks": "^5.8.7", + "@wordpress/reusable-blocks": "^5.8.15", "@wordpress/url": "^4.8.1", - "@wordpress/widgets": "^4.8.7", + "@wordpress/widgets": "^4.8.15", "clsx": "^2.1.1" }, "engines": { @@ -7184,43 +7670,44 @@ } }, "node_modules/@wordpress/editor": { - "version": "14.8.9", - "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.8.9.tgz", - "integrity": "sha512-BG9csn9LbTfpT9Eyi0inp1ANiZSkyaDfRA6TFc4z4YMufHxwIvkJY6VdDYjvN+c4RjM87+f+9b1tw0jAdZ2gPA==", + "version": "14.8.18", + "resolved": "https://registry.npmjs.org/@wordpress/editor/-/editor-14.8.18.tgz", + "integrity": "sha512-haVx9RynZ+b4pvoVGkCoAJ1IT1drBVX/4cOZmlgRZyGLRi083HjricxKXsNlczTGbWHfXcUiJsTTZ1BMNUCWYg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", "@wordpress/api-fetch": "^7.8.2", "@wordpress/blob": "^4.8.1", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/commands": "^1.8.7", - "@wordpress/components": "^28.8.7", + "@wordpress/commands": "^1.8.11", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", - "@wordpress/dataviews": "^4.4.7", + "@wordpress/dataviews": "^4.4.11", "@wordpress/date": "^5.8.2", "@wordpress/deprecated": "^4.8.2", "@wordpress/dom": "^4.8.2", "@wordpress/element": "^6.8.1", - "@wordpress/fields": "^0.0.8", + "@wordpress/fields": "^0.0.16", "@wordpress/hooks": "^4.8.2", "@wordpress/html-entities": "^4.8.1", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", - "@wordpress/interface": "^6.8.7", + "@wordpress/interface": "^6.8.11", "@wordpress/keyboard-shortcuts": "^5.8.3", "@wordpress/keycodes": "^4.8.2", "@wordpress/media-utils": "^5.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/patterns": "^2.8.7", - "@wordpress/plugins": "^7.8.7", - "@wordpress/preferences": "^4.8.7", + "@wordpress/patterns": "^2.8.15", + "@wordpress/plugins": "^7.8.11", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", - "@wordpress/reusable-blocks": "^5.8.7", + "@wordpress/reusable-blocks": "^5.8.15", "@wordpress/rich-text": "^7.8.3", - "@wordpress/server-side-render": "^5.8.7", + "@wordpress/server-side-render": "^5.8.11", "@wordpress/url": "^4.8.1", "@wordpress/warning": "^3.8.1", "@wordpress/wordcount": "^4.8.1", @@ -7245,10 +7732,24 @@ "react-dom": "^18.0.0" } }, + "node_modules/@wordpress/editor/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@wordpress/element": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/@wordpress/element/-/element-6.8.1.tgz", "integrity": "sha512-JUd0XUHjNtQexAUJq5TodweU9kooCdrh/3NlKj8jEMKgveDx+ipXN2zVsaJWzAcu50FBhegaL+hFH6XRtqEDdQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@types/react": "^18.2.79", @@ -7268,6 +7769,7 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/@wordpress/escape-html/-/escape-html-3.8.1.tgz", "integrity": "sha512-JFOjsD6rSFVoFqK+f5YCeYmRycn7Hj29cX3+sBXL0p5Uox7SQLhY/rmATm6o/PiGCVtDeQlZ9I8dBeQSZBoXqQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7335,25 +7837,26 @@ } }, "node_modules/@wordpress/fields": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@wordpress/fields/-/fields-0.0.8.tgz", - "integrity": "sha512-efm5hTjyx3gtB4QKVTKAVV2pLZ+68Kp7/8/iCSY3KXBIMwvNjqQdDTqXjIxdFkScaT1SL+cfrAbMtNVg7mmsVg==", + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/@wordpress/fields/-/fields-0.0.16.tgz", + "integrity": "sha512-FeziO0mS67FCiZ/uNGwRHSbcOSHVVtE7PbO6ZfKStO6APxJSisF+eubimj4l6O8wHgDmaevPPfFBzghn6m39Tw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/blob": "^4.8.1", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", - "@wordpress/dataviews": "^4.4.7", + "@wordpress/dataviews": "^4.4.11", "@wordpress/element": "^6.8.1", "@wordpress/hooks": "^4.8.2", "@wordpress/html-entities": "^4.8.1", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", "@wordpress/notices": "^5.8.3", - "@wordpress/patterns": "^2.8.7", + "@wordpress/patterns": "^2.8.15", "@wordpress/primitives": "^4.8.1", "@wordpress/private-apis": "^1.8.1", "@wordpress/url": "^4.8.1", @@ -7370,14 +7873,15 @@ } }, "node_modules/@wordpress/format-library": { - "version": "5.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.8.7.tgz", - "integrity": "sha512-PQNqMHbVECs0UIPEB97z8T8whdteLt2rHY8sJNbsN6kzZ1U0MKA2n5S0ImB9ck4CyGcbM36xpc6vmKZ8lr1u0w==", + "version": "5.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/format-library/-/format-library-5.8.15.tgz", + "integrity": "sha512-Qp6OFwiHSb6qrluvFOaNlsoElUj1L6YMF6oAq/fBLq4UX2KANkV1UkTNN8Lo/iCe48Za+DxLle8nCa9Gt0XdDg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", - "@wordpress/block-editor": "^14.3.7", - "@wordpress/components": "^28.8.7", + "@wordpress/block-editor": "^14.3.15", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", @@ -7401,6 +7905,7 @@ "version": "4.8.2", "resolved": "https://registry.npmjs.org/@wordpress/hooks/-/hooks-4.8.2.tgz", "integrity": "sha512-BhhYJB/RFIng6Taydah6zCMd9iDYdSlISvByP9tBDsuHZL6iuVBmEGBXmm0Mt6ABCFHELuhFkxwdWPRjWTiqSw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7413,6 +7918,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/html-entities/-/html-entities-4.8.1.tgz", "integrity": "sha512-JOiXUdts9PvanVj3cuPlzJop6UBMDApzLRWRLeZNjZPq0IsTGcI7zPhBVT++aW1C8zTzngzpdFfFaWle3p5w7Q==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7425,6 +7931,7 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/@wordpress/i18n/-/i18n-5.8.2.tgz", "integrity": "sha512-evcwjw1cfGoyJoPMZlaYNwmYJAlIJh5pkgM1QWanpBPTMLsMOMcpZQGzOwvKf1uLozGOKkBAe106qQ7rgjZkoQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/hooks": "^4.8.2", @@ -7445,6 +7952,7 @@ "version": "10.8.2", "resolved": "https://registry.npmjs.org/@wordpress/icons/-/icons-10.8.2.tgz", "integrity": "sha512-ebJ3mRJo3bMgPm9vSTxc7I98HT30mgU59WGUAQyx31cElKbzMhd3jM7bD2JhYXZ1OPnJGY3W4lHovMFfU7wsOQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/element": "^6.8.1", @@ -7459,6 +7967,7 @@ "version": "6.8.5", "resolved": "https://registry.npmjs.org/@wordpress/interactivity/-/interactivity-6.8.5.tgz", "integrity": "sha512-uCLcjYyNzn0KndbGr4ZtOOhogKieTMeH29/j3zK5Bu3pxsS5IxL6Ankanh+u7qkhXTND0AkZJmES7G+Z5DOIzg==", + "license": "GPL-2.0-or-later", "dependencies": { "@preact/signals": "^1.2.2", "preact": "^10.19.3" @@ -7472,6 +7981,7 @@ "version": "2.8.6", "resolved": "https://registry.npmjs.org/@wordpress/interactivity-router/-/interactivity-router-2.8.6.tgz", "integrity": "sha512-3GO9v9im1K7PNjCvr/0dOl3IQZ3RpMxUb3Y41M348Su3R8uNawA85c+9ZdyxYUG91/0atHdehErFiVt45IToYA==", + "license": "GPL-2.0-or-later", "dependencies": { "@wordpress/a11y": "^4.8.2", "@wordpress/interactivity": "^6.8.5" @@ -7482,21 +7992,22 @@ } }, "node_modules/@wordpress/interface": { - "version": "6.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.8.7.tgz", - "integrity": "sha512-YzeS/RFEEyAgz513Quv8zDSyFy7gOr7+Kvm6XVruuWHWyviPRdrHjObnM2rEfPO16AdnSagYj5URZzu/8sSgRw==", + "version": "6.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/interface/-/interface-6.8.11.tgz", + "integrity": "sha512-h10OXs44nkAduPa1ZGOfcdg2JRaTE62d5JwNDYeNwyjFBqLmQknGsSeDS677M/DYvX/AMcseaEObRZv7U8zjQQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", "@wordpress/element": "^6.8.1", "@wordpress/i18n": "^5.8.2", "@wordpress/icons": "^10.8.2", - "@wordpress/plugins": "^7.8.7", - "@wordpress/preferences": "^4.8.7", + "@wordpress/plugins": "^7.8.11", + "@wordpress/preferences": "^4.8.11", "@wordpress/private-apis": "^1.8.1", "@wordpress/viewport": "^6.8.3", "clsx": "^2.1.1" @@ -7514,6 +8025,7 @@ "version": "5.8.1", "resolved": "https://registry.npmjs.org/@wordpress/is-shallow-equal/-/is-shallow-equal-5.8.1.tgz", "integrity": "sha512-2UpGvp+y7pCxQQoNyb5PIYPptZZjfcR80evR/V/0Abyxde+N0dEJHroiOd+Nm1BJJijzhmMH1B7AlyGqnKaFXA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7561,6 +8073,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/@wordpress/keyboard-shortcuts/-/keyboard-shortcuts-5.8.3.tgz", "integrity": "sha512-V8HUZ63/6hronEBO0dQmYxlk7aSM7+fawTDLrqHfMhqi75GWrwhztWSb2Xju0J7rOvSVO7Oc5gk+JX+ZvniWqA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/data": "^10.8.3", @@ -7579,6 +8092,7 @@ "version": "4.8.2", "resolved": "https://registry.npmjs.org/@wordpress/keycodes/-/keycodes-4.8.2.tgz", "integrity": "sha512-BxZD5tk4sDHywV7HOF/hSY924ToW7YJe6hDh4yv+7vo5LpiYQq+/uW21hyXrWEjGXZtdmT1tx69wR16BG35bYw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/i18n": "^5.8.2" @@ -7589,14 +8103,15 @@ } }, "node_modules/@wordpress/list-reusable-blocks": { - "version": "5.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.8.7.tgz", - "integrity": "sha512-u6zI2Fopy2LsOSK0akAaYtw52+vT/2TnDkkmHavwtMxaFIFOhD1NAJIJ2K6XmBDkdSphyAdPbT3pN7FVEKwO1A==", + "version": "5.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/list-reusable-blocks/-/list-reusable-blocks-5.8.11.tgz", + "integrity": "sha512-VDWVVo2L+d0RP6kRz3qDNUHRWchQTPBfe9JXLlIfPfJYRfUyPKXc3wTOAGnfZD0qip8FzD/AIKsiLSht0NItfw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", "@wordpress/blob": "^4.8.1", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/element": "^6.8.1", "@wordpress/i18n": "^5.8.2", @@ -7615,6 +8130,7 @@ "version": "5.8.2", "resolved": "https://registry.npmjs.org/@wordpress/media-utils/-/media-utils-5.8.2.tgz", "integrity": "sha512-r8C9WapBHkoLPOU9so3Ocdo17xHwJ43EfXckc47c9Wvu9Gn3CulkZWSvnIMeQLcm1Ay/PBBRu2Vxim5PNCaTpg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", @@ -7631,6 +8147,7 @@ "version": "5.8.3", "resolved": "https://registry.npmjs.org/@wordpress/notices/-/notices-5.8.3.tgz", "integrity": "sha512-k2I6vS4y3OvaDIGGO5B94up7uQqpO0Vtykz7rvez0+nXJazYylKNv88zsegyjf74bWhhJ3HpfiDl+JVehwHnxw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", @@ -7658,12 +8175,13 @@ } }, "node_modules/@wordpress/nux": { - "version": "9.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.8.7.tgz", - "integrity": "sha512-8pSIyl6TLS6xOqbef22kGAJFyWnLa2AqR/oSPHusJs1cQzWqonZAOzUmZsmJpFJCINaVBYRnNi6er2WyR773hQ==", + "version": "9.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/nux/-/nux-9.8.11.tgz", + "integrity": "sha512-e2H4PU0tDha/Hm38cZi6nf3niaiV/yF0K20Qm5AA5wmLk3AtOd9lxxedsDPjwbAXMHWIUWvasG9Zwyn2mGCpdA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", @@ -7681,17 +8199,18 @@ } }, "node_modules/@wordpress/patterns": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.8.7.tgz", - "integrity": "sha512-8NQdsjo886MZLUG6Zj+rF+XS08+wM6moOEgJ9RM2MmrnzlpKa9p3OSnfjmcdMG1xu07e5n6Sv76qJRolGuNelg==", + "version": "2.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/patterns/-/patterns-2.8.15.tgz", + "integrity": "sha512-BrZVtcbFYAVZKbRR3s55VwvOudwoTbjsQiex3JDkJSdb9fs6wP4OBQAxw+NHGEP+9Cvo65PqHWpCqWkFTl40/Q==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", "@wordpress/html-entities": "^4.8.1", @@ -7711,12 +8230,13 @@ } }, "node_modules/@wordpress/plugins": { - "version": "7.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.8.7.tgz", - "integrity": "sha512-27ONa5cJGvhutnSXJpy510OGkQBPEZ85FyQruR+vXmVY0ic9ro5Tn4xF+Ctr4Jzi24QTp+njCi97VLXWdeaLoQ==", + "version": "7.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/plugins/-/plugins-7.8.11.tgz", + "integrity": "sha512-iNzNZh1eqCn3NpZZ7/Oo/vaazaXFOSvUGPaOecGvQcMBxh22phnVgq1ZdEAU6QG73bYZAn3kPu7sfOtrpDkLQQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/element": "^6.8.1", "@wordpress/hooks": "^4.8.2", @@ -7752,13 +8272,14 @@ } }, "node_modules/@wordpress/preferences": { - "version": "4.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.8.7.tgz", - "integrity": "sha512-LHLWNX8fvDowIMxDG8cr3mYXwYVB7SdUUl6yrjbp/sYW/kufHdSJCo3w3tZHqqn6/qDr71IqhaSKjrghMASCOw==", + "version": "4.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/preferences/-/preferences-4.8.11.tgz", + "integrity": "sha512-5P84OWcfTmEHCE8ocHqmU7wj/F8osQmprP3gtLRYSmffw9hw7kWlSlG8Z3kErmS1jVQWfDZPRs2CoEIRNE93LA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", @@ -7781,6 +8302,7 @@ "version": "2.8.2", "resolved": "https://registry.npmjs.org/@wordpress/preferences-persistence/-/preferences-persistence-2.8.2.tgz", "integrity": "sha512-vFFSVXtV7Z5JKW0Vv0T1HjtuMb3ufUy8tsQcPWB924Js7T5tRGZt5Bidn6RflXTDYudrwGMlDwBrKIBWXY9F0g==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2" @@ -7795,6 +8317,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/prettier-config/-/prettier-config-4.8.1.tgz", "integrity": "sha512-JDiVChhgwv6ZGa4aVOXnDJnj/dUFkD/SSvRLFkLOdB+ZbWgddJQkVB3rpJOfREsPtEFWqgTxcJoZjnkqltNbww==", "dev": true, + "license": "GPL-2.0-or-later", "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" @@ -7807,6 +8330,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/primitives/-/primitives-4.8.1.tgz", "integrity": "sha512-enfNxpEWycMNnvF7lpP8QYGKotu6B0UfUVcA89oDkam4OhP8tkpP1OVZyPHPgseRWweS/hL6aW/4bvwNSklf+g==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/element": "^6.8.1", @@ -7824,6 +8348,7 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/@wordpress/priority-queue/-/priority-queue-3.8.1.tgz", "integrity": "sha512-USgFi75o7GlWiPu1hSGSWFXcj5nOjTVjrj0jM6sV+vqa39oRXxE4zpxGkvV4EINn8OrqvHBs/17uygAFXqppZQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "requestidlecallback": "^0.3.0" @@ -7837,6 +8362,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@wordpress/private-apis/-/private-apis-1.8.1.tgz", "integrity": "sha512-/5PV8+QfkaLJs9TsFTIVMc3Ns+KdysFzS5ZGSmRGgsjzzgqHZb670mxf/6YaFldNjELbg5QsvcHNm3mkfkYiQg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -7849,6 +8375,7 @@ "version": "5.8.1", "resolved": "https://registry.npmjs.org/@wordpress/redux-routine/-/redux-routine-5.8.1.tgz", "integrity": "sha512-mScAi3R/o9dAeS5yQm7F/txNSHhXthYE/NbHtm808+iMgXvgTztAJSg4K29YpAhXgqPTFYMTX0cFiiQ1uNEGqw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "is-plain-object": "^5.0.0", @@ -7864,15 +8391,16 @@ } }, "node_modules/@wordpress/reusable-blocks": { - "version": "5.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.8.7.tgz", - "integrity": "sha512-HT75CX5NkHU5bjEjMFlJ8JKvgc1MHqonTI4G40m50CYoW3P4783nnBMLJCuC6E04k0oHfn5mC1wEY2TCVU5Pgw==", + "version": "5.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/reusable-blocks/-/reusable-blocks-5.8.15.tgz", + "integrity": "sha512-qgZlUf21UzaoF9x7WMZ7g3savI2PG6EugA0QnDWSI0bk19JnXoJ23DwkY4mm0WglTVOnsDq/HQjQWFvMNji6KA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", - "@wordpress/core-data": "^7.8.7", + "@wordpress/components": "^28.8.11", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", "@wordpress/i18n": "^5.8.2", @@ -7894,6 +8422,7 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@wordpress/rich-text/-/rich-text-7.8.3.tgz", "integrity": "sha512-rB2hebZbTAI5LdLLtatwijpRKzYO+UdQes1Bni2WBAd59KH0YIj4kkVnj39lYYrV3OS+CqSqH2W4UJB7HPNRWQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/a11y": "^4.8.2", @@ -7918,6 +8447,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@wordpress/router/-/router-1.8.1.tgz", "integrity": "sha512-ASF2uFwCh4bt7HZ/OVFQs18sBoXnDvcGjg9voyCGirX6keH4jutGon3OTUorQVVLlirOrWDeeAciRJPT7TGYZA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/element": "^6.8.1", @@ -7938,6 +8468,7 @@ "resolved": "https://registry.npmjs.org/@wordpress/scripts/-/scripts-30.0.6.tgz", "integrity": "sha512-vpl/qyGHEVUO3gxwQRDd5pfN3IEAGgKB6QWpyMKcaT8KTn1a6TpM8KP7w4oNkPLnUrMouqXFpLb4gUBD0BbHKQ==", "dev": true, + "license": "GPL-2.0-or-later", "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11", @@ -9021,14 +9552,15 @@ } }, "node_modules/@wordpress/server-side-render": { - "version": "5.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.8.7.tgz", - "integrity": "sha512-wwNhR5usoP/GRp7CviRu0KYvmkTb1kLIkEIulMKc9/lrZyl2ibx14C9Ub12ytLyZLzQ7jSqfmImmlOxL2+VrcQ==", + "version": "5.8.11", + "resolved": "https://registry.npmjs.org/@wordpress/server-side-render/-/server-side-render-5.8.11.tgz", + "integrity": "sha512-D7TM+Z6HETLVQ40qe/d7IgXQ+N8fwsuss5TtuaNgUyN0W1ZUFhk1ANd25Qmz7xGSWDMZOql75a08XCgi/7OgnQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", "@wordpress/data": "^10.8.3", "@wordpress/deprecated": "^4.8.2", @@ -9050,6 +9582,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/shortcode/-/shortcode-4.8.1.tgz", "integrity": "sha512-c8wYr2zmXOonAgABnFmuKRQ7wYyAIvshb3nCVrjFbpHnFmK+CHMg/y/KmcnfnPscdAO+uKDBKYNp0fnYfQBhiQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "memize": "^2.0.1" @@ -9063,6 +9596,7 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/@wordpress/style-engine/-/style-engine-2.8.1.tgz", "integrity": "sha512-wsYdvrc+CEqidp9TmpG+/9s6zm1GEUU2Qp5qIELcQWU6VNzuycc5nqzFnRiKv0Pz+6TRgksjLsb86IQrCcg2nA==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "change-case": "^4.1.2" @@ -9094,6 +9628,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@wordpress/sync/-/sync-1.8.1.tgz", "integrity": "sha512-i2vYN15nh5Cf8EgryZIIKAvx0IZi34gBqXNwvSymhh1/eD4yzcFyaFfko7NS93fPeGuVy/Hxj+2M1CdZ7fd43w==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@types/simple-peer": "^9.11.5", @@ -9115,6 +9650,7 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/@wordpress/token-list/-/token-list-3.8.1.tgz", "integrity": "sha512-uQEimvYlEsjQh5PHscYnctSnuK11ZOpUGLlYbJ10VtoisDJP2bqYwu36FBGrEuY5g0y6y/rP/Hw1BirZ+wrZyw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -9127,6 +9663,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/@wordpress/undo-manager/-/undo-manager-1.8.1.tgz", "integrity": "sha512-l5U3NswNDWHVQ3sAsiCvI65JDrAFlBnAIsoKsc38zg2OkNO1m8IIf/K+D3YAqBBM+zDahSGbNaLCEftBbZVSUg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/is-shallow-equal": "^5.8.1" @@ -9140,6 +9677,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/url/-/url-4.8.1.tgz", "integrity": "sha512-YZcNOlJAUhkxMWlmkkc6mvSdXukkleq8j5Z8p8kBWQX9Wxng84ygyBSMiqFeFvAIs8nNDXBrqG9zGGRxMW6q/g==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "remove-accents": "^0.5.0" @@ -9153,6 +9691,7 @@ "version": "6.8.3", "resolved": "https://registry.npmjs.org/@wordpress/viewport/-/viewport-6.8.3.tgz", "integrity": "sha512-izS9YQmogTilQx0xrd9RspAeF/PT1V9N7S7QjNAH9UZ7E4k32m2Vg6ebcYQGShRgmjUReiunIDDr0VDSK5h3PQ==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/compose": "^7.8.3", @@ -9171,23 +9710,25 @@ "version": "3.8.1", "resolved": "https://registry.npmjs.org/@wordpress/warning/-/warning-3.8.1.tgz", "integrity": "sha512-xlo0Xw1jiyiE6nh43NAtQMAL05VDk837kY2xfjsus6wD597TeWFpj6gmcRMH25FZULTUHDB2EPfLviWXqOgUfg==", + "license": "GPL-2.0-or-later", "engines": { "node": ">=18.12.0", "npm": ">=8.19.2" } }, "node_modules/@wordpress/widgets": { - "version": "4.8.7", - "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.8.7.tgz", - "integrity": "sha512-ue13DriErcVra9zzZ2JpOhq5ttNUM9wRSRp5cFdvEy8SH3e7Ag8rN8bY6r395dJCaaquOs5Ss+fiJUOeZOFP9A==", + "version": "4.8.15", + "resolved": "https://registry.npmjs.org/@wordpress/widgets/-/widgets-4.8.15.tgz", + "integrity": "sha512-nAlEzexJ4577KIetFUQhLFJeL4TnOhWV0MsH2Gq0bt6xaE2uCsao5mYwLm3efY64WqaOrKiLxrntHU3qvlOZCw==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0", "@wordpress/api-fetch": "^7.8.2", - "@wordpress/block-editor": "^14.3.7", + "@wordpress/block-editor": "^14.3.15", "@wordpress/blocks": "^13.8.5", - "@wordpress/components": "^28.8.7", + "@wordpress/components": "^28.8.11", "@wordpress/compose": "^7.8.3", - "@wordpress/core-data": "^7.8.7", + "@wordpress/core-data": "^7.8.15", "@wordpress/data": "^10.8.3", "@wordpress/element": "^6.8.1", "@wordpress/i18n": "^5.8.2", @@ -9208,6 +9749,7 @@ "version": "4.8.1", "resolved": "https://registry.npmjs.org/@wordpress/wordcount/-/wordcount-4.8.1.tgz", "integrity": "sha512-72e8N6I6he5pA9KDwqrq3mRMb+9WtzqR67C0uBmrlQg4FT23XptG8fDVacD2Das2nWSAgaLR/4GhKv34pPj1vg==", + "license": "GPL-2.0-or-later", "dependencies": { "@babel/runtime": "^7.16.0" }, @@ -9220,13 +9762,15 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/abab": { "version": "2.0.6", @@ -9254,10 +9798,11 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -9275,15 +9820,6 @@ "acorn-walk": "^8.0.2" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -11778,9 +12314,10 @@ "dev": true }, "node_modules/client-zip": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/client-zip/-/client-zip-2.4.5.tgz", - "integrity": "sha512-4y4d5ZeTH/szIAMQeC8ju67pxtvj+3u20wMGwOFrZk+pegy3aSEA2JkwgC8XVDTXP/Iqn1gyqNQXmkyBp4KLEQ==" + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/client-zip/-/client-zip-2.4.6.tgz", + "integrity": "sha512-e7t1u14h/yT0A12qBwFsaus8UZZ8+MCaNAEn/z53mrukLq/LFcKX7TkbntAppGu8he2p8pz9vc5NEGE/h4ohlw==", + "license": "MIT" }, "node_modules/clipboard": { "version": "2.0.11", @@ -12169,10 +12706,11 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -13382,10 +13920,11 @@ } }, "node_modules/default-gateway/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -13660,6 +14199,19 @@ "node": ">=0.10.0" } }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -13849,10 +14401,11 @@ } }, "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -13861,12 +14414,13 @@ } }, "node_modules/dotenv-expand": { - "version": "11.0.6", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.6.tgz", - "integrity": "sha512-8NHi73otpWsZGBSZwwknTXS5pqMOrk9+Ssrna8xCaxkzEpU9OTf9R5ArQGVw03//Zmk9MOwLPng9WwndvpAJ5g==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-12.0.1.tgz", + "integrity": "sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "dotenv": "^16.4.4" + "dotenv": "^16.4.5" }, "engines": { "node": ">=12" @@ -14043,10 +14597,11 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -15024,10 +15579,11 @@ "dev": true }, "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -15489,10 +16045,11 @@ } }, "node_modules/execa/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "nice-try": "^1.0.4", @@ -15656,9 +16213,9 @@ "dev": true }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "dev": true, "license": "MIT", "dependencies": { @@ -15667,7 +16224,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -15681,7 +16238,7 @@ "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.10", + "path-to-regexp": "0.1.12", "proxy-addr": "~2.0.7", "qs": "6.13.0", "range-parser": "~1.2.1", @@ -15696,6 +16253,10 @@ }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/debug": { @@ -15714,9 +16275,9 @@ "dev": true }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", - "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "dev": true, "license": "MIT" }, @@ -18115,10 +18676,11 @@ } }, "node_modules/grunt-jsdoc/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -19084,10 +19646,11 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -19527,10 +20090,11 @@ "integrity": "sha512-jQ5Ql18hdCQ4qS+RCrbLfz1n+Pags27q5TwMKvZyhp5hh2UULUYZUy1keqj6k6SYsdqIYjnmz7xyyEY0V67B8Q==" }, "node_modules/immutable": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", - "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==", - "dev": true + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true, + "license": "MIT" }, "node_modules/import-fresh": { "version": "3.3.0", @@ -20787,10 +21351,11 @@ } }, "node_modules/jest-changed-files/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -25528,15 +26093,16 @@ "dev": true }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -25658,6 +26224,13 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT" + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", @@ -27152,9 +27725,10 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -27370,9 +27944,9 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "funding": [ { "type": "opencollective", @@ -27390,7 +27964,7 @@ "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -28979,9 +29553,9 @@ } }, "node_modules/qunit": { - "version": "2.22.0", - "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.22.0.tgz", - "integrity": "sha512-wPYvAvpjTL3zlUeyCX75T8gfZfdVXZa8y1EVkGe/XZNORIsCH/WI2X8R2KlemT921X9EKSZUL6CLGSPC7Ks08g==", + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/qunit/-/qunit-2.23.1.tgz", + "integrity": "sha512-CGrsGy7NhkQmfiyOixBpbexh2PT7ekIb35uWiBi/hBNdTJF1W98UonyACFJJs8UmcP96lH+YJlX99dYZi5rZkg==", "dev": true, "license": "MIT", "dependencies": { @@ -30336,12 +30910,13 @@ } }, "node_modules/sass": { - "version": "1.79.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", - "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", + "version": "1.79.6", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.6.tgz", + "integrity": "sha512-PVVjeeiUGx6Nj4PtEE/ecwu8ltwfPKzHxbbVmmLj4l1FYHhOyfA0scuVF8sVaa+b+VY4z7BVKjKq0cPUQdUU3g==", "dev": true, "license": "MIT", "dependencies": { + "@parcel/watcher": "^2.4.1", "chokidar": "^4.0.0", "immutable": "^4.0.0", "source-map-js": ">=0.6.2 <2.0.0" @@ -32837,6 +33412,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -32902,10 +33478,11 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.37.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", + "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -32920,16 +33497,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.11.tgz", + "integrity": "sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -32953,11 +33531,69 @@ } } }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -32967,6 +33603,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -33451,10 +34088,11 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "bin": { "uglifyjs": "bin/uglifyjs" }, @@ -33906,16 +34544,17 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-to-istanbul": { @@ -34040,10 +34679,11 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -34056,7 +34696,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/wbuf": { "version": "1.7.3", @@ -34089,26 +34730,26 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.90.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.2.tgz", - "integrity": "sha512-ziXu8ABGr0InCMEYFnHrYweinHK2PWrMqnwdHk2oK3rRhv/1B+2FnfwYv5oD+RrknK/Pp/Hmyvu+eAsaMYhzCw==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", + "version": "5.97.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", + "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -34116,7 +34757,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -34238,10 +34879,11 @@ } }, "node_modules/webpack-cli/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", diff --git a/package.json b/package.json index 8df8c493cee91..fe2afcf572122 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "WordPress", - "version": "6.7.0", + "version": "6.8.0", "description": "WordPress is open source software you can use to create a beautiful website, blog, or app.", "repository": { "type": "svn", @@ -38,8 +38,8 @@ "check-node-version": "4.2.1", "copy-webpack-plugin": "12.0.2", "cssnano": "7.0.6", - "dotenv": "16.4.5", - "dotenv-expand": "11.0.6", + "dotenv": "16.4.7", + "dotenv-expand": "12.0.1", "grunt": "1.6.1", "grunt-banner": "^0.6.0", "grunt-contrib-clean": "~2.0.1", @@ -62,19 +62,19 @@ "ink-docstrap": "1.3.2", "install-changed": "1.1.0", "matchdep": "~2.0.0", - "postcss": "8.4.47", + "postcss": "8.4.49", "prettier": "npm:wp-prettier@2.6.2", - "qunit": "~2.22.0", + "qunit": "~2.23.1", "react-refresh": "0.14.0", - "sass": "1.79.4", + "sass": "1.79.6", "sinon": "16.1.3", "sinon-test": "~3.1.6", "source-map-loader": "5.0.0", - "terser-webpack-plugin": "5.3.10", - "uglify-js": "^3.17.4", - "uuid": "9.0.1", + "terser-webpack-plugin": "5.3.11", + "uglify-js": "^3.19.3", + "uuid": "11.0.3", "wait-on": "8.0.1", - "webpack": "5.90.2", + "webpack": "5.97.1", "webpack-livereload-plugin": "3.0.2" }, "dependencies": { @@ -83,58 +83,58 @@ "@wordpress/api-fetch": "7.8.2", "@wordpress/autop": "4.8.1", "@wordpress/blob": "4.8.1", - "@wordpress/block-directory": "5.8.9", - "@wordpress/block-editor": "14.3.7", - "@wordpress/block-library": "9.8.8", + "@wordpress/block-directory": "5.8.18", + "@wordpress/block-editor": "14.3.15", + "@wordpress/block-library": "9.8.16", "@wordpress/block-serialization-default-parser": "5.8.1", "@wordpress/blocks": "13.8.5", - "@wordpress/commands": "1.8.7", - "@wordpress/components": "28.8.7", + "@wordpress/commands": "1.8.11", + "@wordpress/components": "28.8.11", "@wordpress/compose": "7.8.3", - "@wordpress/core-commands": "1.8.7", - "@wordpress/core-data": "7.8.7", - "@wordpress/customize-widgets": "5.8.8", + "@wordpress/core-commands": "1.8.15", + "@wordpress/core-data": "7.8.15", + "@wordpress/customize-widgets": "5.8.16", "@wordpress/data": "10.8.3", "@wordpress/data-controls": "4.8.3", - "@wordpress/dataviews": "4.4.7", + "@wordpress/dataviews": "4.4.11", "@wordpress/date": "5.8.2", "@wordpress/deprecated": "4.8.2", "@wordpress/dom": "4.8.2", "@wordpress/dom-ready": "4.8.1", - "@wordpress/edit-post": "8.8.9", - "@wordpress/edit-site": "6.8.9", - "@wordpress/edit-widgets": "6.8.8", - "@wordpress/editor": "14.8.9", + "@wordpress/edit-post": "8.8.18", + "@wordpress/edit-site": "6.8.18", + "@wordpress/edit-widgets": "6.8.16", + "@wordpress/editor": "14.8.18", "@wordpress/element": "6.8.1", "@wordpress/escape-html": "3.8.1", - "@wordpress/fields": "0.0.8", - "@wordpress/format-library": "5.8.7", + "@wordpress/fields": "0.0.16", + "@wordpress/format-library": "5.8.15", "@wordpress/hooks": "4.8.2", "@wordpress/html-entities": "4.8.1", "@wordpress/i18n": "5.8.2", "@wordpress/icons": "10.8.2", "@wordpress/interactivity": "6.8.5", "@wordpress/interactivity-router": "2.8.6", - "@wordpress/interface": "6.8.7", + "@wordpress/interface": "6.8.11", "@wordpress/is-shallow-equal": "5.8.1", "@wordpress/keyboard-shortcuts": "5.8.3", "@wordpress/keycodes": "4.8.2", - "@wordpress/list-reusable-blocks": "5.8.7", + "@wordpress/list-reusable-blocks": "5.8.11", "@wordpress/media-utils": "5.8.2", "@wordpress/notices": "5.8.3", - "@wordpress/nux": "9.8.7", - "@wordpress/patterns": "2.8.7", - "@wordpress/plugins": "7.8.7", - "@wordpress/preferences": "4.8.7", + "@wordpress/nux": "9.8.11", + "@wordpress/patterns": "2.8.15", + "@wordpress/plugins": "7.8.11", + "@wordpress/preferences": "4.8.11", "@wordpress/preferences-persistence": "2.8.2", "@wordpress/primitives": "4.8.1", "@wordpress/priority-queue": "3.8.1", "@wordpress/private-apis": "1.8.1", "@wordpress/redux-routine": "5.8.1", - "@wordpress/reusable-blocks": "5.8.7", + "@wordpress/reusable-blocks": "5.8.15", "@wordpress/rich-text": "7.8.3", "@wordpress/router": "1.8.1", - "@wordpress/server-side-render": "5.8.7", + "@wordpress/server-side-render": "5.8.11", "@wordpress/shortcode": "4.8.1", "@wordpress/style-engine": "2.8.1", "@wordpress/sync": "1.8.1", @@ -143,7 +143,7 @@ "@wordpress/url": "4.8.1", "@wordpress/viewport": "6.8.3", "@wordpress/warning": "3.8.1", - "@wordpress/widgets": "4.8.7", + "@wordpress/widgets": "4.8.15", "@wordpress/wordcount": "4.8.1", "backbone": "1.6.0", "clipboard": "2.0.11", @@ -179,17 +179,18 @@ "grunt": "grunt", "lint:jsdoc": "wp-scripts lint-js", "lint:jsdoc:fix": "wp-scripts lint-js --fix", - "env:start": "node ./tools/local-env/scripts/start.js && node ./tools/local-env/scripts/docker.js run -T php composer update -W", + "env:start": "node ./tools/local-env/scripts/start.js && node ./tools/local-env/scripts/docker.js run -T --rm php composer update -W", "env:stop": "node ./tools/local-env/scripts/docker.js down", "env:restart": "npm run env:stop && npm run env:start", "env:clean": "node ./tools/local-env/scripts/docker.js down -v --remove-orphans", "env:reset": "node ./tools/local-env/scripts/docker.js down --rmi all -v --remove-orphans", "env:install": "node ./tools/local-env/scripts/install.js", - "env:cli": "node ./tools/local-env/scripts/docker.js run cli", + "env:cli": "node ./tools/local-env/scripts/docker.js run --rm cli", "env:logs": "node ./tools/local-env/scripts/docker.js logs", "env:pull": "node ./tools/local-env/scripts/docker.js pull", "test:performance": "wp-scripts test-playwright --config tests/performance/playwright.config.js", - "test:php": "node ./tools/local-env/scripts/docker.js run php ./vendor/bin/phpunit", + "test:php": "node ./tools/local-env/scripts/docker.js run --rm php ./vendor/bin/phpunit", + "test:coverage": "npm run test:php -- --coverage-html ./coverage/html/ --coverage-php ./coverage/php/report.php --coverage-text=./coverage/text/report.txt", "test:e2e": "wp-scripts test-playwright --config tests/e2e/playwright.config.js", "test:visual": "wp-scripts test-playwright --config tests/visual-regression/playwright.config.js", "sync-gutenberg-packages": "grunt sync-gutenberg-packages", diff --git a/src/js/_enqueues/admin/edit-comments.js b/src/js/_enqueues/admin/edit-comments.js index e007edf465c6f..9a3d81a751bd8 100644 --- a/src/js/_enqueues/admin/edit-comments.js +++ b/src/js/_enqueues/admin/edit-comments.js @@ -1020,7 +1020,8 @@ window.commentReply = { setTimeout(function() { var rtop, rbottom, scrollTop, vp, scrollBottom, - isComposing = false; + isComposing = false, + isContextMenuOpen = false; rtop = $('#replyrow').offset().top; rbottom = rtop + $('#replyrow').height(); @@ -1035,9 +1036,20 @@ window.commentReply = { $( '#replycontent' ) .trigger( 'focus' ) + .on( 'contextmenu keydown', function ( e ) { + // Check if the context menu is open and set state. + if ( e.type === 'contextmenu' ) { + isContextMenuOpen = true; + } + + // Update the context menu state if the Escape key is pressed. + if ( e.type === 'keydown' && e.which === 27 && isContextMenuOpen ) { + isContextMenuOpen = false; + } + } ) .on( 'keyup', function( e ) { - // Close on Escape except when Input Method Editors (IMEs) are in use. - if ( e.which === 27 && ! isComposing ) { + // Close on Escape unless Input Method Editors (IMEs) are in use or the context menu is open. + if ( e.which === 27 && ! isComposing && ! isContextMenuOpen ) { commentReply.revert(); } } ) diff --git a/src/js/_enqueues/admin/post.js b/src/js/_enqueues/admin/post.js index 5dd70b950fb72..3f8b42e261e8b 100644 --- a/src/js/_enqueues/admin/post.js +++ b/src/js/_enqueues/admin/post.js @@ -659,8 +659,10 @@ jQuery( function($) { 'li.popular-category > label input[type="checkbox"]', function() { var t = $(this), c = t.is(':checked'), id = t.val(); - if ( id && t.parents('#taxonomy-'+taxonomy).length ) - $('#in-' + taxonomy + '-' + id + ', #in-popular-' + taxonomy + '-' + id).prop( 'checked', c ); + if ( id && t.parents('#taxonomy-'+taxonomy).length ) { + $('input#in-' + taxonomy + '-' + id + ', input[id^="in-' + taxonomy + '-' + id + '-"]').prop('checked', c); + $('input#in-popular-' + taxonomy + '-' + id).prop('checked', c); + } } ); diff --git a/src/js/_enqueues/lib/nav-menu.js b/src/js/_enqueues/lib/nav-menu.js index 789c3b6e88098..398f54ecfddc6 100644 --- a/src/js/_enqueues/lib/nav-menu.js +++ b/src/js/_enqueues/lib/nav-menu.js @@ -216,6 +216,8 @@ checkboxes.prop( 'checked', false ); t.find( '.button-controls .select-all' ).prop( 'checked', false ); t.find( '.button-controls .spinner' ).removeClass( 'is-active' ); + t.updateParentDropdown(); + t.updateOrderDropdown(); }); }); }, @@ -288,6 +290,117 @@ }); }); return this; + }, + updateParentDropdown : function() { + return this.each(function(){ + var menuItems = $( '#menu-to-edit li' ), + parentDropdowns = $( '.edit-menu-item-parent' ); + + $.each( parentDropdowns, function() { + var parentDropdown = $( this ), + $html = '', + $selected = '', + currentItemID = parentDropdown.closest( 'li.menu-item' ).find( '.menu-item-data-db-id' ).val(), + currentparentID = parentDropdown.closest( 'li.menu-item' ).find( '.menu-item-data-parent-id' ).val(), + currentItem = parentDropdown.closest( 'li.menu-item' ), + currentMenuItemChild = currentItem.childMenuItems(), + excludeMenuItem = [ currentItemID ]; + + if ( currentMenuItemChild.length > 0 ) { + $.each( currentMenuItemChild, function(){ + var childItem = $(this), + childID = childItem.find( '.menu-item-data-db-id' ).val(); + + excludeMenuItem.push( childID ); + }); + } + + if ( currentparentID == 0 ) { + $selected = 'selected'; + } + + $html += ''; + + $.each( menuItems, function() { + var menuItem = $(this), + $selected = '', + menuID = menuItem.find( '.menu-item-data-db-id' ).val(), + menuTitle = menuItem.find( '.edit-menu-item-title' ).val(); + + if ( ! excludeMenuItem.includes( menuID ) ) { + if ( currentparentID == menuID ) { + $selected = 'selected'; + } + $html += ''; + } + }); + + parentDropdown.html( $html ); + }); + + }); + }, + updateOrderDropdown : function() { + return this.each( function() { + var itemPosition, + orderDropdowns = $( '.edit-menu-item-order' ); + + $.each( orderDropdowns, function() { + var orderDropdown = $( this ), + menuItem = orderDropdown.closest( 'li.menu-item' ).first(), + depth = menuItem.menuItemDepth(), + isPrimaryMenuItem = ( 0 === depth ), + $html = '', + $selected = ''; + + if ( isPrimaryMenuItem ) { + var primaryItems = $( '.menu-item-depth-0' ), + totalMenuItems = primaryItems.length; + + itemPosition = primaryItems.index( menuItem ) + 1; + + for ( let i = 1; i < totalMenuItems + 1; i++ ) { + $selected = ''; + if ( i == itemPosition ) { + $selected = 'selected'; + } + var itemString = wp.i18n.sprintf( + /* translators: 1: The current menu item number, 2: The total number of menu items. */ + wp.i18n._x( '%1$s of %2$s', 'part of a total number of menu items' ), + i, + totalMenuItems + ); + $html += ''; + } + + } else { + var parentItem = menuItem.prevAll( '.menu-item-depth-' + parseInt( depth - 1, 10 ) ).first(), + parentItemId = parentItem.find( '.menu-item-data-db-id' ).val(), + subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemId + '"]' ), + totalSubMenuItems = subItems.length; + + itemPosition = $( subItems.parents('.menu-item').get().reverse() ).index( menuItem ) + 1; + + for ( let i = 1; i < totalSubMenuItems + 1; i++ ) { + $selected = ''; + if ( i == itemPosition ) { + $selected = 'selected'; + } + var submenuString = wp.i18n.sprintf( + /* translators: 1: The current submenu item number, 2: The total number of submenu items. */ + wp.i18n._x( '%1$s of %2$s', 'part of a total number of menu items' ), + i, + totalSubMenuItems + ); + $html += ''; + } + + } + + orderDropdown.html( $html ); + }); + + }); } }); }, @@ -297,7 +410,6 @@ }, moveMenuItem : function( $this, dir ) { - var items, newItemPosition, newDepth, menuItems = $( '#menu-to-edit li' ), menuItemsCount = menuItems.length, @@ -400,6 +512,8 @@ api.registerChange(); api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); + thisItem.updateParentDropdown(); + thisItem.updateOrderDropdown(); if ( a11ySpeech ) { wp.a11y.speak( a11ySpeech ); @@ -431,6 +545,123 @@ api.moveMenuItem( $( this ).parents( 'li.menu-item' ).find( 'a.item-edit' ), dir ); } }); + + // Set menu parents data for all menu items. + menu.updateParentDropdown(); + + // Set menu order data for all menu items. + menu.updateOrderDropdown(); + + // Update menu item parent when value is changed. + menu.on( 'change', '.edit-menu-item-parent', function() { + api.changeMenuParent( $( this ) ); + }); + + // Update menu item order when value is changed. + menu.on( 'change', '.edit-menu-item-order', function() { + api.changeMenuOrder( $( this ) ); + }); + }, + + /** + * changeMenuParent( [parentDropdown] ) + * + * @since 6.7.0 + * + * @param {object} parentDropdown select field + */ + changeMenuParent : function( parentDropdown ) { + var menuItemNewPosition, + menuItems = $( '#menu-to-edit li' ), + $this = $( parentDropdown ), + newParentID = $this.val(), + menuItem = $this.closest( 'li.menu-item' ).first(), + menuItemOldDepth = menuItem.menuItemDepth(), + menuItemChildren = menuItem.childMenuItems(), + menuItemNoChildren = parseInt( menuItem.childMenuItems().length, 10 ), + parentItem = $( '#menu-item-' + newParentID ), + parentItemDepth = parentItem.menuItemDepth(), + menuItemNewDepth = parseInt( parentItemDepth ) + 1; + + if ( newParentID == 0 ) { + menuItemNewDepth = 0; + } + + menuItem.find( '.menu-item-data-parent-id' ).val( newParentID ); + menuItem.moveHorizontally( menuItemNewDepth, menuItemOldDepth ); + + if ( menuItemNoChildren > 0 ) { + menuItem = menuItem.add( menuItemChildren ); + } + menuItem.detach(); + + menuItems = $( '#menu-to-edit li' ); + + var parentItemPosition = parseInt( parentItem.index(), 10 ), + parentItemNoChild = parseInt( parentItem.childMenuItems().length, 10 ); + + if ( parentItemNoChild > 0 ){ + menuItemNewPosition = parentItemPosition + parentItemNoChild; + } else { + menuItemNewPosition = parentItemPosition; + } + + if ( newParentID == 0 ) { + menuItemNewPosition = menuItems.length - 1; + } + + menuItem.insertAfter( menuItems.eq( menuItemNewPosition ) ).updateParentMenuItemDBId().updateParentDropdown().updateOrderDropdown(); + + api.registerChange(); + api.refreshKeyboardAccessibility(); + api.refreshAdvancedAccessibility(); + $this.trigger( 'focus' ); + wp.a11y.speak( menus.parentUpdated, 'polite' ); + }, + + /** + * changeMenuOrder( [OrderDropdown] ) + * + * @since 6.7.0 + * + * @param {object} orderDropdown select field + */ + changeMenuOrder : function( orderDropdown ) { + var menuItems = $( '#menu-to-edit li' ), + $this = $( orderDropdown ), + newOrderID = parseInt( $this.val(), 10), + menuItem = $this.closest( 'li.menu-item' ).first(), + menuItemChildren = menuItem.childMenuItems(), + menuItemNoChildren = menuItemChildren.length, + menuItemCurrentPosition = parseInt( menuItem.index(), 10 ), + parentItemID = menuItem.find( '.menu-item-data-parent-id' ).val(), + subItems = $( '.menu-item .menu-item-data-parent-id[value="' + parentItemID + '"]' ), + currentItemAtPosition = $(subItems[newOrderID - 1]).closest( 'li.menu-item' ); + + if ( menuItemNoChildren > 0 ) { + menuItem = menuItem.add( menuItemChildren ); + } + + var currentItemNoChildren = currentItemAtPosition.childMenuItems().length, + currentItemPosition = parseInt( currentItemAtPosition.index(), 10 ); + + menuItems = $( '#menu-to-edit li' ); + + var menuItemNewPosition = currentItemPosition; + + if(menuItemCurrentPosition > menuItemNewPosition){ + menuItemNewPosition = currentItemPosition; + menuItem.detach().insertBefore( menuItems.eq( menuItemNewPosition ) ).updateOrderDropdown(); + } else { + menuItemNewPosition = menuItemNewPosition + currentItemNoChildren; + menuItem.detach().insertAfter( menuItems.eq( menuItemNewPosition ) ).updateOrderDropdown(); + } + + api.registerChange(); + api.refreshKeyboardAccessibility(); + api.refreshAdvancedAccessibility(); + $this.trigger( 'focus' ); + wp.a11y.speak( menus.orderUpdated, 'polite' ); }, /** @@ -737,6 +968,8 @@ api.refreshKeyboardAccessibility(); api.refreshAdvancedAccessibility(); + ui.item.updateParentDropdown(); + ui.item.updateOrderDropdown(); api.refreshAdvancedAccessibilityOfItem( ui.item.find( 'a.item-edit' ) ); }, change: function(e, ui) { @@ -988,6 +1221,8 @@ deletionSpeech = menus.itemsDeleted.replace( '%s', itemsPendingDeletion ); wp.a11y.speak( deletionSpeech, 'polite' ); that.disableBulkSelection(); + menus.updateParentDropdown(); + menus.updateOrderDropdown(); } }); }, @@ -1527,6 +1762,8 @@ } api.refreshAdvancedAccessibility(); wp.a11y.speak( menus.itemRemoved ); + menus.updateParentDropdown(); + menus.updateOrderDropdown(); }); }, diff --git a/src/js/media/controllers/library.js b/src/js/media/controllers/library.js index 91bdeea656f95..db77c8dae8241 100644 --- a/src/js/media/controllers/library.js +++ b/src/js/media/controllers/library.js @@ -196,7 +196,7 @@ Library = wp.media.controller.State.extend(/** @lends wp.media.controller.Librar isImageAttachment: function( attachment ) { // If uploading, we know the filename but not the mime type. if ( attachment.get('uploading') ) { - return /\.(jpe?g|png|gif|webp|avif|heic)$/i.test( attachment.get('filename') ); + return /\.(jpe?g|png|gif|webp|avif|heic|heif)$/i.test( attachment.get('filename') ); } return attachment.get('type') === 'image'; diff --git a/src/wp-admin/about.php b/src/wp-admin/about.php index 5a04723ae8870..01398046f52f5 100644 --- a/src/wp-admin/about.php +++ b/src/wp-admin/about.php @@ -80,7 +80,7 @@
- +
@@ -88,7 +88,7 @@
- +
@@ -110,7 +110,7 @@
- +
@@ -118,7 +118,7 @@
- +
@@ -141,7 +141,7 @@

-

+

diff --git a/src/wp-admin/async-upload.php b/src/wp-admin/async-upload.php index 551f854b5ae15..a146f6a48a71b 100644 --- a/src/wp-admin/async-upload.php +++ b/src/wp-admin/async-upload.php @@ -74,7 +74,9 @@ } ?> - +
diff --git a/src/wp-admin/css/colors/modern/colors.scss b/src/wp-admin/css/colors/modern/colors.scss index 845d4f034dae8..a66855729fbd4 100644 --- a/src/wp-admin/css/colors/modern/colors.scss +++ b/src/wp-admin/css/colors/modern/colors.scss @@ -3,7 +3,7 @@ $scheme-name: "modern"; $base-color: #1e1e1e; $highlight-color: #3858e9; -$menu-submenu-focus-text: #33f078; +$menu-submenu-focus-text: #7b90ff; $notification-color: $highlight-color; $link: $highlight-color; diff --git a/src/wp-admin/css/common.css b/src/wp-admin/css/common.css index c7082137d5537..6d24705d549b2 100644 --- a/src/wp-admin/css/common.css +++ b/src/wp-admin/css/common.css @@ -2462,7 +2462,7 @@ h1.nav-tab-wrapper, /* Back-compat for pre-4.4 */ } .nav-menus-php .metabox-holder .accordion-section-title span.dashicons.dashicons-arrow-down::before { position: relative; - left: -1px + left: -1px; } .nav-menus-php .metabox-holder .accordion-section.open .accordion-section-title span.dashicons.dashicons-arrow-down { diff --git a/src/wp-admin/css/customize-controls.css b/src/wp-admin/css/customize-controls.css index 59905ea902347..1805790eb2d3e 100644 --- a/src/wp-admin/css/customize-controls.css +++ b/src/wp-admin/css/customize-controls.css @@ -553,17 +553,18 @@ body.trashing #publish-settings { .15s border-color ease-in-out; } -.accordion-section-title:has(button.accordion-trigger) { +.accordion-section-title:has(button.accordion-trigger), +#customize-controls .current-panel .control-section > h3.accordion-section-title:has(button.accordion-trigger) { padding: 0; } .accordion-section-title button.accordion-trigger { all: unset; width: 100%; - height: 100%; - padding: 10px 10px 11px 14px; + padding: 10px 30px 11px 14px; display: flex; align-items: center; + box-sizing: border-box; } .accordion-section-title button.accordion-trigger:has(.menu-in-location) { @@ -587,6 +588,7 @@ body.trashing #publish-settings { #customize-outer-theme-controls .accordion-section-title:after { content: "\f345"; color: #a7aaad; + pointer-events: none; } #customize-theme-controls .accordion-section-content, diff --git a/src/wp-admin/css/login.css b/src/wp-admin/css/login.css index 57465ea586479..c2211d9da681e 100644 --- a/src/wp-admin/css/login.css +++ b/src/wp-admin/css/login.css @@ -269,11 +269,11 @@ p { vertical-align: baseline; } -.login .wp-login-logo { +.login h1 { text-align: center; } -.login .wp-login-logo a { +.login h1 a { background-image: url(../images/w-logo-blue.png?ver=20131202); background-image: none, url(../images/wordpress-logo.svg?ver=20131107); background-size: 84px; @@ -323,13 +323,13 @@ p { .login #nav a:hover, .login #backtoblog a:hover, -.login .wp-login-logo a:hover { +.login h1 a:hover { color: #135e96; } .login #nav a:focus, .login #backtoblog a:focus, -.login .wp-login-logo a:focus { +.login h1 a:focus { color: #043959; } @@ -390,7 +390,7 @@ body.interim-login { margin: 5px auto 20px; } -.interim-login.login .wp-login-logo a { +.interim-login.login h1 a { width: auto; } diff --git a/src/wp-admin/css/nav-menus.css b/src/wp-admin/css/nav-menus.css index 7e9cf57bd4fdd..f34a014ac7c33 100644 --- a/src/wp-admin/css/nav-menus.css +++ b/src/wp-admin/css/nav-menus.css @@ -827,22 +827,13 @@ body.menu-max-depth-11 { min-width: 1280px !important; } display: none; } -.menu-item-settings .description-thin, -.menu-item-settings .description-wide { - margin-right: 10px; - float: left; -} - -.description-thin { - width: calc(50% - 5px); -} - -.menu-item-settings .description-thin + .description-thin { - margin-right: 0; +.description-group { + display: flex; + column-gap: 10px; } -.description-wide { - width: 100%; +.description-group > * { + flex-grow: 1; } .menu-item-actions { @@ -951,8 +942,7 @@ body.menu-max-depth-11 { min-width: 1280px !important; } } .menu-item-bar .menu-item-handle, - .menu-item-settings, - .description-wide { + .menu-item-settings { width: auto; } @@ -960,9 +950,8 @@ body.menu-max-depth-11 { min-width: 1280px !important; } padding: 10px; } - .menu-item-settings .description-thin, - .menu-item-settings .description-wide { - width: 100%; + .menu-item-settings .description-group { + display: block; } .menu-item-settings input { diff --git a/src/wp-admin/customize.php b/src/wp-admin/customize.php index 40857031a7ef8..b27292d9eb949 100644 --- a/src/wp-admin/customize.php +++ b/src/wp-admin/customize.php @@ -100,6 +100,12 @@ $wp_customize->set_autofocus( $autofocus ); } +// Let's roll. +header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); + +wp_user_settings(); +_wp_admin_html_begin(); + $registered = $wp_scripts->registered; $wp_scripts = new WP_Scripts(); $wp_scripts->registered = $registered; @@ -126,12 +132,6 @@ */ do_action( 'customize_controls_enqueue_scripts' ); -// Let's roll. -header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) ); - -wp_user_settings(); -_wp_admin_html_begin(); - $body_class = 'wp-core-ui wp-customizer js'; if ( wp_is_mobile() ) : diff --git a/src/wp-admin/edit-form-advanced.php b/src/wp-admin/edit-form-advanced.php index f20fafb3493cd..b21b50f4ae4df 100644 --- a/src/wp-admin/edit-form-advanced.php +++ b/src/wp-admin/edit-form-advanced.php @@ -546,7 +546,13 @@ ?> - + + +
- + diff --git a/src/wp-admin/edit-tag-form.php b/src/wp-admin/edit-tag-form.php index b6da6c6687bc8..ec40fcc52e61f 100644 --- a/src/wp-admin/edit-tag-form.php +++ b/src/wp-admin/edit-tag-form.php @@ -44,7 +44,7 @@ do_action_deprecated( 'edit_tag_form_pre', array( $tag ), '3.0.0', '{$taxonomy}_pre_edit_form' ); } -$wp_http_referer = ! empty( $_REQUEST['wp_http_referer'] ) ? sanitize_text_field( $_REQUEST['wp_http_referer'] ) : ''; +$wp_http_referer = ! empty( $_REQUEST['wp_http_referer'] ) ? sanitize_url( $_REQUEST['wp_http_referer'] ) : ''; $wp_http_referer = remove_query_arg( array( 'action', 'message', 'tag_ID' ), $wp_http_referer ); // Also used by Edit Tags. diff --git a/src/wp-admin/includes/ajax-actions.php b/src/wp-admin/includes/ajax-actions.php index 75d7a610006af..83b682634b075 100644 --- a/src/wp-admin/includes/ajax-actions.php +++ b/src/wp-admin/includes/ajax-actions.php @@ -3556,9 +3556,9 @@ function wp_ajax_get_revision_diffs() { $return = array(); - // Removes the script timeout limit by setting it to 0 allowing ample time for diff UI setup. + // Increase the script timeout limit to allow ample time for diff UI setup. if ( function_exists( 'set_time_limit' ) ) { - set_time_limit( 0 ); + set_time_limit( 5 * MINUTE_IN_SECONDS ); } foreach ( $_REQUEST['compare'] as $compare_key ) { diff --git a/src/wp-admin/includes/class-pclzip.php b/src/wp-admin/includes/class-pclzip.php index 658fda5f22495..f1128d900c9e6 100644 --- a/src/wp-admin/includes/class-pclzip.php +++ b/src/wp-admin/includes/class-pclzip.php @@ -5714,7 +5714,7 @@ function PclZipUtilOptionText($p_option) // -------------------------------------------------------------------------------- function PclZipUtilTranslateWinPath($p_path, $p_remove_disk_letter=true) { - if (stristr(php_uname(), 'windows')) { + if (PHP_OS_FAMILY == 'Windows') { // ----- Look for potential disk letter if (($p_remove_disk_letter) && (($v_position = strpos($p_path, ':')) != false)) { $p_path = substr($p_path, $v_position+1); diff --git a/src/wp-admin/includes/class-theme-installer-skin.php b/src/wp-admin/includes/class-theme-installer-skin.php index 035e26f608a9f..2f1fa344c9a5b 100644 --- a/src/wp-admin/includes/class-theme-installer-skin.php +++ b/src/wp-admin/includes/class-theme-installer-skin.php @@ -251,7 +251,7 @@ private function do_overwrite() { ); $table = ''; - $table .= ''; + $table .= ''; $is_same_theme = true; // Let's consider only these rows. @@ -333,7 +333,7 @@ private function do_overwrite() { if ( $this->is_downgrading ) { $warning = sprintf( /* translators: %s: Documentation URL. */ - __( 'You are uploading an older version of the active theme. You can continue to install the older version, but be sure to back up your database and files first.' ), + __( 'You are uploading an older version of the installed theme. You can continue to install the older version, but be sure to back up your database and files first.' ), __( 'https://developer.wordpress.org/advanced-administration/security/backup/' ) ); } else { @@ -351,7 +351,7 @@ private function do_overwrite() { $install_actions['overwrite_theme'] = sprintf( '%s', wp_nonce_url( add_query_arg( 'overwrite', $overwrite, $this->url ), 'theme-upload' ), - _x( 'Replace active with uploaded', 'theme' ) + _x( 'Replace installed with uploaded', 'theme' ) ); } else { echo $blocked_message; diff --git a/src/wp-admin/includes/class-walker-nav-menu-edit.php b/src/wp-admin/includes/class-walker-nav-menu-edit.php index 7cc7052cdba16..026da47accdd8 100644 --- a/src/wp-admin/includes/class-walker-nav-menu-edit.php +++ b/src/wp-admin/includes/class-walker-nav-menu-edit.php @@ -218,18 +218,20 @@ public function start_el( &$output, $data_object, $depth = 0, $args = null, $cur

-

- -

-

- -

+
+

+ +

+

+ +

+

+ + +
+

+ + +

+

+ + +

+
+ ID ); + } else { + $switched_locale = switch_to_locale( get_locale() ); + } + switch ( $type ) { case 'success': // We updated. /* translators: Site updated notification email subject. 1: Site title, 2: WordPress version. */ @@ -1139,8 +1147,11 @@ protected function send_email( $type, $core_update, $result = null ) { $email = apply_filters( 'auto_core_update_email', $email, $type, $core_update, $result ); wp_mail( $email['to'], wp_specialchars_decode( $email['subject'] ), $email['body'], $email['headers'] ); - } + if ( $switched_locale ) { + restore_previous_locale(); + } + } /** * Checks whether an email should be sent after attempting plugin or theme updates. @@ -1255,6 +1266,14 @@ protected function send_plugin_theme_email( $type, $successful_updates, $failed_ } } + $admin_user = get_user_by( 'email', get_site_option( 'admin_email' ) ); + + if ( $admin_user ) { + $switched_locale = switch_to_user_locale( $admin_user->ID ); + } else { + $switched_locale = switch_to_locale( get_locale() ); + } + $body = array(); $successful_plugins = ( ! empty( $successful_updates['plugin'] ) ); $successful_themes = ( ! empty( $successful_updates['theme'] ) ); @@ -1526,6 +1545,10 @@ protected function send_plugin_theme_email( $type, $successful_updates, $failed_ if ( $result ) { update_option( 'auto_plugin_theme_update_emails', $past_failure_emails ); } + + if ( $switched_locale ) { + restore_previous_locale(); + } } /** @@ -1534,9 +1557,12 @@ protected function send_plugin_theme_email( $type, $successful_updates, $failed_ * @since 3.7.0 */ protected function send_debug_email() { - $update_count = 0; - foreach ( $this->update_results as $type => $updates ) { - $update_count += count( $updates ); + $admin_user = get_user_by( 'email', get_site_option( 'admin_email' ) ); + + if ( $admin_user ) { + $switched_locale = switch_to_user_locale( $admin_user->ID ); + } else { + $switched_locale = switch_to_locale( get_locale() ); } $body = array(); @@ -1715,6 +1741,10 @@ protected function send_debug_email() { $email = apply_filters( 'automatic_updates_debug_email', $email, $failures, $this->update_results ); wp_mail( $email['to'], wp_specialchars_decode( $email['subject'] ), $email['body'], $email['headers'] ); + + if ( $switched_locale ) { + restore_previous_locale(); + } } /** diff --git a/src/wp-admin/includes/class-wp-debug-data.php b/src/wp-admin/includes/class-wp-debug-data.php index d5ff1cb7559de..f227c9fdd2f7e 100644 --- a/src/wp-admin/includes/class-wp-debug-data.php +++ b/src/wp-admin/includes/class-wp-debug-data.php @@ -30,7 +30,6 @@ public static function check_for_updates() { * @since 6.7.0 Modularized into separate theme-oriented methods. * * @throws ImagickException - * @global array $_wp_theme_features * * @return array The debug data for the site. */ @@ -39,14 +38,10 @@ public static function debug_data() { * Set up the array that holds all debug information. * * When iterating through the debug data, the ordering of the sections - * occurs in insertion-order of the assignments into this array. Setting - * up empty values here preserves that specific ordering, so it doesn't - * depend on when inside this method each section is otherwise assigned. - * - * When all sections have been modularized, this will be the final single - * assignment of the sections before filtering and none will be empty. + * occurs in insertion-order of the assignments into this array. * - * @ticket 61648 + * This is the single assignment of the sections before filtering. Null-entries will + * be automatically be removed. */ $info = array( 'wp-core' => self::get_wp_core(), @@ -726,7 +721,6 @@ private static function get_wp_media(): array { ); } - /** * Gets the WordPress MU plugins section of the debug data. * @@ -1014,6 +1008,8 @@ private static function get_wp_plugins_raw_data(): array { * * @since 6.7.0 * + * @global array $_wp_theme_features + * * @return array */ private static function get_wp_active_theme(): array { diff --git a/src/wp-admin/includes/class-wp-privacy-requests-table.php b/src/wp-admin/includes/class-wp-privacy-requests-table.php index 61a917c3f6579..1c84a21b1bae2 100644 --- a/src/wp-admin/includes/class-wp-privacy-requests-table.php +++ b/src/wp-admin/includes/class-wp-privacy-requests-table.php @@ -430,7 +430,8 @@ public function column_cb( $item ) { * @since 4.9.6 * * @param WP_User_Request $item Item being shown. - * @return string Status column markup. + * @return string|void Status column markup. Returns a string if no status is found, + * otherwise it displays the markup. */ public function column_status( $item ) { $status = get_post_status( $item->ID ); diff --git a/src/wp-admin/includes/class-wp-site-health-auto-updates.php b/src/wp-admin/includes/class-wp-site-health-auto-updates.php index 581fc44600c5f..1904acd4e08c5 100644 --- a/src/wp-admin/includes/class-wp-site-health-auto-updates.php +++ b/src/wp-admin/includes/class-wp-site-health-auto-updates.php @@ -66,7 +66,8 @@ static function ( $test ) { * @param string $constant The name of the constant to check. * @param bool|string|array $value The value that the constant should be, if set, * or an array of acceptable values. - * @return array The test results. + * @return array|null The test results if there are any constants set incorrectly, + * or null if the test passed. */ public function test_constants( $constant, $value ) { $acceptable_values = (array) $value; @@ -82,6 +83,8 @@ public function test_constants( $constant, $value ) { 'severity' => 'fail', ); } + + return null; } /** @@ -89,7 +92,8 @@ public function test_constants( $constant, $value ) { * * @since 5.2.0 * - * @return array The test results. + * @return array|null The test results if wp_version_check() is disabled, + * or null if the test passed. */ public function test_wp_version_check_attached() { if ( ( ! is_multisite() || is_main_site() && is_network_admin() ) @@ -104,6 +108,8 @@ public function test_wp_version_check_attached() { 'severity' => 'fail', ); } + + return null; } /** @@ -111,7 +117,8 @@ public function test_wp_version_check_attached() { * * @since 5.2.0 * - * @return array The test results. + * @return array|null The test results if the {@see 'automatic_updater_disabled'} filter is set, + * or null if the test passed. */ public function test_filters_automatic_updater_disabled() { /** This filter is documented in wp-admin/includes/class-wp-automatic-updater.php */ @@ -125,6 +132,8 @@ public function test_filters_automatic_updater_disabled() { 'severity' => 'fail', ); } + + return null; } /** @@ -132,7 +141,7 @@ public function test_filters_automatic_updater_disabled() { * * @since 5.3.0 * - * @return array|false The test results. False if auto-updates are enabled. + * @return array|false The test results if auto-updates are disabled, false otherwise. */ public function test_wp_automatic_updates_disabled() { if ( ! class_exists( 'WP_Automatic_Updater' ) ) { @@ -156,7 +165,7 @@ public function test_wp_automatic_updates_disabled() { * * @since 5.2.0 * - * @return array|false The test results. False if the auto-updates failed. + * @return array|false The test results if auto-updates previously failed, false otherwise. */ public function test_if_failed_update() { $failed = get_site_option( 'auto_core_update_failed' ); @@ -312,7 +321,9 @@ public function test_check_wp_filesystem_method() { * * @global WP_Filesystem_Base $wp_filesystem WordPress filesystem subclass. * - * @return array|false The test results. False if they're not writeable. + * @return array|false The test results if at least some of WordPress core files are writeable, + * or if a list of the checksums could not be retrieved from WordPress.org. + * False if the core files are not writeable. */ public function test_all_files_writable() { global $wp_filesystem; @@ -397,7 +408,8 @@ public function test_all_files_writable() { * * @since 5.2.0 * - * @return array|false The test results. False if it isn't a development version. + * @return array|false|null The test results if development updates are blocked. + * False if it isn't a development version. Null if the test passed. */ public function test_accepts_dev_updates() { require ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z @@ -428,6 +440,8 @@ public function test_accepts_dev_updates() { 'severity' => 'fail', ); } + + return null; } /** @@ -435,7 +449,8 @@ public function test_accepts_dev_updates() { * * @since 5.2.0 * - * @return array The test results. + * @return array|null The test results if minor updates are blocked, + * or null if the test passed. */ public function test_accepts_minor_updates() { if ( defined( 'WP_AUTO_UPDATE_CORE' ) && false === WP_AUTO_UPDATE_CORE ) { @@ -460,5 +475,7 @@ public function test_accepts_minor_updates() { 'severity' => 'fail', ); } + + return null; } } diff --git a/src/wp-admin/includes/class-wp-upgrader.php b/src/wp-admin/includes/class-wp-upgrader.php index a9784682ebb0f..c47773569fc17 100644 --- a/src/wp-admin/includes/class-wp-upgrader.php +++ b/src/wp-admin/includes/class-wp-upgrader.php @@ -525,7 +525,11 @@ public function install_package( $args = array() ) { $destination = $args['destination']; $clear_destination = $args['clear_destination']; - // Give the upgrade an additional 300 seconds(5 minutes) to ensure the install doesn't prematurely timeout having used up the maximum script execution time upacking and downloading in WP_Upgrader->run. + /* + * Give the upgrade an additional 300 seconds (5 minutes) to ensure the install + * doesn't prematurely timeout having used up the maximum script execution time + * upacking and downloading in WP_Upgrader->run(). + */ if ( function_exists( 'set_time_limit' ) ) { set_time_limit( 300 ); } diff --git a/src/wp-admin/includes/image.php b/src/wp-admin/includes/image.php index 157169ce6ef18..8471c999c8ec5 100644 --- a/src/wp-admin/includes/image.php +++ b/src/wp-admin/includes/image.php @@ -291,7 +291,26 @@ function wp_create_image_subsizes( $file, $attachment_id ) { * If the original image's dimensions are over the threshold, * scale the image and use it as the "full" size. */ + $scale_down = false; + $convert = false; + if ( $threshold && ( $image_meta['width'] > $threshold || $image_meta['height'] > $threshold ) ) { + // The image will be converted if needed on saving. + $scale_down = true; + } else { + // The image may need to be converted regardless of its dimensions. + $output_format = wp_get_image_editor_output_format( $file, $imagesize['mime'] ); + + if ( + is_array( $output_format ) && + array_key_exists( $imagesize['mime'], $output_format ) && + $output_format[ $imagesize['mime'] ] !== $imagesize['mime'] + ) { + $convert = true; + } + } + + if ( $scale_down || $convert ) { $editor = wp_get_image_editor( $file ); if ( is_wp_error( $editor ) ) { @@ -299,14 +318,20 @@ function wp_create_image_subsizes( $file, $attachment_id ) { return $image_meta; } - // Resize the image. - $resized = $editor->resize( $threshold, $threshold ); + if ( $scale_down ) { + // Resize the image. This will also convet it if needed. + $resized = $editor->resize( $threshold, $threshold ); + } elseif ( $convert ) { + // The image will be converted (if possible) when saved. + $resized = true; + } + $rotated = null; // If there is EXIF data, rotate according to EXIF Orientation. if ( ! is_wp_error( $resized ) && is_array( $exif_meta ) ) { $resized = $editor->maybe_exif_rotate(); - $rotated = $resized; + $rotated = $resized; // bool true or WP_Error } if ( ! is_wp_error( $resized ) ) { @@ -314,7 +339,23 @@ function wp_create_image_subsizes( $file, $attachment_id ) { * Append "-scaled" to the image file name. It will look like "my_image-scaled.jpg". * This doesn't affect the sub-sizes names as they are generated from the original image (for best quality). */ - $saved = $editor->save( $editor->generate_filename( 'scaled' ) ); + if ( $scale_down ) { + $saved = $editor->save( $editor->generate_filename( 'scaled' ) ); + } elseif ( $convert ) { + /* + * Generate a new file name for the converted image. + * + * As the image file name will be unique due to the changed file extension, + * it does not need a suffix to be unique. However, the generate_filename method + * does not allow for an empty suffix, so the "-converted" suffix is required to + * be added and subsequently removed. + */ + $converted_file_name = $editor->generate_filename( 'converted' ); + $converted_file_name = preg_replace( '/(-converted\.)([a-z0-9]+)$/i', '.$2', $converted_file_name ); + $saved = $editor->save( $converted_file_name ); + } else { + $saved = $editor->save(); + } if ( ! is_wp_error( $saved ) ) { $image_meta = _wp_image_meta_replace_original( $saved, $file, $image_meta, $attachment_id ); diff --git a/src/wp-admin/includes/media.php b/src/wp-admin/includes/media.php index df63128a16f4d..82187fd62e50d 100644 --- a/src/wp-admin/includes/media.php +++ b/src/wp-admin/includes/media.php @@ -773,7 +773,7 @@ function media_upload_form_handler() { $post['menu_order'] = $attachment['menu_order']; } - if ( isset( $send_id ) && $attachment_id == $send_id ) { + if ( isset( $send_id ) && $attachment_id === $send_id ) { if ( isset( $attachment['post_parent'] ) ) { $post['post_parent'] = $attachment['post_parent']; } diff --git a/src/wp-admin/includes/nav-menu.php b/src/wp-admin/includes/nav-menu.php index 5ba3276b3aea5..c3b1244f47fd9 100644 --- a/src/wp-admin/includes/nav-menu.php +++ b/src/wp-admin/includes/nav-menu.php @@ -875,7 +875,7 @@ function wp_nav_menu_item_taxonomy_meta_box( $data_object, $box ) { } $num_pages = (int) ceil( - wp_count_terms( + (int) wp_count_terms( array_merge( $args, array( diff --git a/src/wp-admin/includes/revision.php b/src/wp-admin/includes/revision.php index b6b946fd0861a..ab3842fc552bc 100644 --- a/src/wp-admin/includes/revision.php +++ b/src/wp-admin/includes/revision.php @@ -380,7 +380,7 @@ function wp_print_revision_templates() {
' . esc_html_x( 'Active', 'theme' ) . '' . esc_html_x( 'Uploaded', 'theme' ) . '
' . esc_html_x( 'Installed', 'theme' ) . '' . esc_html_x( 'Uploaded', 'theme' ) . '