diff --git a/composer.json b/composer.json
index 8f9dfcf..85b6840 100644
--- a/composer.json
+++ b/composer.json
@@ -27,6 +27,15 @@
       ]
     }
   ],
+
+  "scripts": {
+    "test": [
+      "phpunit --bootstrap tests/phpunit/bootstrap.php"
+    ]
+  },
+  "scripts-descriptions": {
+    "test": "Run phpunit tests"
+  },
   "require": {
     "newfold-labs/wp-module-context": "^1.0",
     "wp-forge/collection": "^1.0.2",
@@ -36,7 +45,8 @@
     "newfold-labs/wp-module-installer": "^1.3.0"
   },
   "require-dev": {
-    "newfold-labs/wp-php-standards": "^1.2.4"
+    "newfold-labs/wp-php-standards": "^1.2.4",
+    "10up/wp_mock": "^1.0"
   },
   "config": {
     "allow-plugins": {
diff --git a/composer.lock b/composer.lock
index 0003c07..609d6a9 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "9602237f7a761fdd4d6a07c7e39e5a91",
+    "content-hash": "ca2c8e02a0e2bd4dc2e2ec57eeb69aef",
     "packages": [
         {
             "name": "doctrine/inflector",
@@ -815,6 +815,108 @@
         }
     ],
     "packages-dev": [
+        {
+            "name": "10up/wp_mock",
+            "version": "1.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/10up/wp_mock.git",
+                "reference": "48b7f22934a4351e45e336f09263ee27fc9ddcbe"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/10up/wp_mock/zipball/48b7f22934a4351e45e336f09263ee27fc9ddcbe",
+                "reference": "48b7f22934a4351e45e336f09263ee27fc9ddcbe",
+                "shasum": ""
+            },
+            "require": {
+                "antecedent/patchwork": "^2.1",
+                "mockery/mockery": "^1.6",
+                "php": ">=7.4 < 9",
+                "phpunit/phpunit": "^9.6"
+            },
+            "require-dev": {
+                "behat/behat": "^v3.11.0",
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.7",
+                "friendsofphp/php-cs-fixer": "^3.4",
+                "php-coveralls/php-coveralls": "^v2.7",
+                "php-stubs/wordpress-globals": "^0.2",
+                "php-stubs/wordpress-stubs": "^6.3",
+                "phpcompatibility/php-compatibility": "^9.3",
+                "phpstan/phpstan": "^1.10",
+                "phpstan/phpstan-mockery": "^1.1",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "sebastian/comparator": "^4.0.8",
+                "sempro/phpunit-pretty-print": "^1.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "WP_Mock\\": "./php/WP_Mock"
+                },
+                "classmap": [
+                    "php/WP_Mock.php"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "A mocking library to take the pain out of unit testing for WordPress",
+            "support": {
+                "issues": "https://github.com/10up/wp_mock/issues",
+                "source": "https://github.com/10up/wp_mock/tree/1.0.1"
+            },
+            "time": "2024-01-22T02:22:57+00:00"
+        },
+        {
+            "name": "antecedent/patchwork",
+            "version": "2.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/antecedent/patchwork.git",
+                "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/antecedent/patchwork/zipball/1bf183a3e1bd094f231a2128b9ecc5363c269245",
+                "reference": "1bf183a3e1bd094f231a2128b9ecc5363c269245",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.1.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": ">=4"
+            },
+            "type": "library",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Ignas Rudaitis",
+                    "email": "ignas.rudaitis@gmail.com"
+                }
+            ],
+            "description": "Method redefinition (monkey-patching) functionality for PHP.",
+            "homepage": "https://antecedent.github.io/patchwork/",
+            "keywords": [
+                "aop",
+                "aspect",
+                "interception",
+                "monkeypatching",
+                "redefinition",
+                "runkit",
+                "testing"
+            ],
+            "support": {
+                "issues": "https://github.com/antecedent/patchwork/issues",
+                "source": "https://github.com/antecedent/patchwork/tree/2.2.1"
+            },
+            "time": "2024-12-11T10:19:54+00:00"
+        },
         {
             "name": "dealerdirect/phpcodesniffer-composer-installer",
             "version": "v1.0.0",
@@ -893,6 +995,270 @@
             },
             "time": "2023-01-05T11:28:13+00:00"
         },
+        {
+            "name": "doctrine/instantiator",
+            "version": "2.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/doctrine/instantiator.git",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^8.1"
+            },
+            "require-dev": {
+                "doctrine/coding-standard": "^11",
+                "ext-pdo": "*",
+                "ext-phar": "*",
+                "phpbench/phpbench": "^1.2",
+                "phpstan/phpstan": "^1.9.4",
+                "phpstan/phpstan-phpunit": "^1.3",
+                "phpunit/phpunit": "^9.5.27",
+                "vimeo/psalm": "^5.4"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Marco Pivetta",
+                    "email": "ocramius@gmail.com",
+                    "homepage": "https://ocramius.github.io/"
+                }
+            ],
+            "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
+            "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
+            "keywords": [
+                "constructor",
+                "instantiate"
+            ],
+            "support": {
+                "issues": "https://github.com/doctrine/instantiator/issues",
+                "source": "https://github.com/doctrine/instantiator/tree/2.0.0"
+            },
+            "funding": [
+                {
+                    "url": "https://www.doctrine-project.org/sponsorship.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://www.patreon.com/phpdoctrine",
+                    "type": "patreon"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2022-12-30T00:23:10+00:00"
+        },
+        {
+            "name": "hamcrest/hamcrest-php",
+            "version": "v2.0.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/hamcrest/hamcrest-php.git",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^5.3|^7.0|^8.0"
+            },
+            "replace": {
+                "cordoval/hamcrest-php": "*",
+                "davedevelopment/hamcrest-php": "*",
+                "kodova/hamcrest-php": "*"
+            },
+            "require-dev": {
+                "phpunit/php-file-iterator": "^1.4 || ^2.0",
+                "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "hamcrest"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "description": "This is the PHP port of Hamcrest Matchers",
+            "keywords": [
+                "test"
+            ],
+            "support": {
+                "issues": "https://github.com/hamcrest/hamcrest-php/issues",
+                "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1"
+            },
+            "time": "2020-07-09T08:09:16+00:00"
+        },
+        {
+            "name": "mockery/mockery",
+            "version": "1.6.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/mockery/mockery.git",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/mockery/mockery/zipball/1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "reference": "1f4efdd7d3beafe9807b08156dfcb176d18f1699",
+                "shasum": ""
+            },
+            "require": {
+                "hamcrest/hamcrest-php": "^2.0.1",
+                "lib-pcre": ">=7.0",
+                "php": ">=7.3"
+            },
+            "conflict": {
+                "phpunit/phpunit": "<8.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^8.5 || ^9.6.17",
+                "symplify/easy-coding-standard": "^12.1.14"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "library/helpers.php",
+                    "library/Mockery.php"
+                ],
+                "psr-4": {
+                    "Mockery\\": "library/Mockery"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Pádraic Brady",
+                    "email": "padraic.brady@gmail.com",
+                    "homepage": "https://github.com/padraic",
+                    "role": "Author"
+                },
+                {
+                    "name": "Dave Marshall",
+                    "email": "dave.marshall@atstsolutions.co.uk",
+                    "homepage": "https://davedevelopment.co.uk",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Nathanael Esayeas",
+                    "email": "nathanael.esayeas@protonmail.com",
+                    "homepage": "https://github.com/ghostwriter",
+                    "role": "Lead Developer"
+                }
+            ],
+            "description": "Mockery is a simple yet flexible PHP mock object framework",
+            "homepage": "https://github.com/mockery/mockery",
+            "keywords": [
+                "BDD",
+                "TDD",
+                "library",
+                "mock",
+                "mock objects",
+                "mockery",
+                "stub",
+                "test",
+                "test double",
+                "testing"
+            ],
+            "support": {
+                "docs": "https://docs.mockery.io/",
+                "issues": "https://github.com/mockery/mockery/issues",
+                "rss": "https://github.com/mockery/mockery/releases.atom",
+                "security": "https://github.com/mockery/mockery/security/advisories",
+                "source": "https://github.com/mockery/mockery"
+            },
+            "time": "2024-05-16T03:13:13+00:00"
+        },
+        {
+            "name": "myclabs/deep-copy",
+            "version": "1.12.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/myclabs/DeepCopy.git",
+                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845",
+                "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.1 || ^8.0"
+            },
+            "conflict": {
+                "doctrine/collections": "<1.6.8",
+                "doctrine/common": "<2.13.3 || >=3 <3.2.2"
+            },
+            "require-dev": {
+                "doctrine/collections": "^1.6.8",
+                "doctrine/common": "^2.13.3 || ^3.2.2",
+                "phpspec/prophecy": "^1.10",
+                "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+            },
+            "type": "library",
+            "autoload": {
+                "files": [
+                    "src/DeepCopy/deep_copy.php"
+                ],
+                "psr-4": {
+                    "DeepCopy\\": "src/DeepCopy/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "description": "Create deep copies (clones) of your objects",
+            "keywords": [
+                "clone",
+                "copy",
+                "duplicate",
+                "object",
+                "object graph"
+            ],
+            "support": {
+                "issues": "https://github.com/myclabs/DeepCopy/issues",
+                "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1"
+            },
+            "funding": [
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-11-08T17:47:46+00:00"
+        },
         {
             "name": "newfold-labs/wp-php-standards",
             "version": "1.2.4",
@@ -931,374 +1297,1935 @@
             "time": "2024-07-22T23:16:21+00:00"
         },
         {
-            "name": "phpcompatibility/php-compatibility",
-            "version": "9.3.5",
+            "name": "nikic/php-parser",
+            "version": "v5.4.0",
             "source": {
                 "type": "git",
-                "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
-                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
+                "url": "https://github.com/nikic/PHP-Parser.git",
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
-                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
+                "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494",
+                "reference": "447a020a1f875a434d62f2a401f53b82a396e494",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3",
-                "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
-            },
-            "conflict": {
-                "squizlabs/php_codesniffer": "2.6.2"
+                "ext-ctype": "*",
+                "ext-json": "*",
+                "ext-tokenizer": "*",
+                "php": ">=7.4"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
+                "ircmaxell/php-yacc": "^0.0.7",
+                "phpunit/phpunit": "^9.0"
             },
-            "suggest": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
-                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            "bin": [
+                "bin/php-parse"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "psr-4": {
+                    "PhpParser\\": "lib/PhpParser"
+                }
             },
-            "type": "phpcodesniffer-standard",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0-or-later"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Wim Godden",
-                    "homepage": "https://github.com/wimg",
-                    "role": "lead"
-                },
-                {
-                    "name": "Juliette Reinders Folmer",
-                    "homepage": "https://github.com/jrfnl",
-                    "role": "lead"
-                },
-                {
-                    "name": "Contributors",
-                    "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+                    "name": "Nikita Popov"
                 }
             ],
-            "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
-            "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+            "description": "A PHP parser written in PHP",
             "keywords": [
-                "compatibility",
-                "phpcs",
-                "standards"
+                "parser",
+                "php"
+            ],
+            "support": {
+                "issues": "https://github.com/nikic/PHP-Parser/issues",
+                "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0"
+            },
+            "time": "2024-12-30T11:07:19+00:00"
+        },
+        {
+            "name": "phar-io/manifest",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/manifest.git",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176",
+                "reference": "54750ef60c58e43759730615a392c31c80e23176",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-phar": "*",
+                "ext-xmlwriter": "*",
+                "phar-io/version": "^3.0.1",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
+            "support": {
+                "issues": "https://github.com/phar-io/manifest/issues",
+                "source": "https://github.com/phar-io/manifest/tree/2.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:33:53+00:00"
+        },
+        {
+            "name": "phar-io/version",
+            "version": "3.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/phar-io/version.git",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
+                "shasum": ""
+            },
+            "require": {
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Heuer",
+                    "email": "sebastian@phpeople.de",
+                    "role": "Developer"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "Library for handling version information and constraints",
+            "support": {
+                "issues": "https://github.com/phar-io/version/issues",
+                "source": "https://github.com/phar-io/version/tree/3.2.1"
+            },
+            "time": "2022-02-21T01:04:05+00:00"
+        },
+        {
+            "name": "phpcompatibility/php-compatibility",
+            "version": "9.3.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPCompatibility/PHPCompatibility.git",
+                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibility/zipball/9fb324479acf6f39452e0655d2429cc0d3914243",
+                "reference": "9fb324479acf6f39452e0655d2429cc0d3914243",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3",
+                "squizlabs/php_codesniffer": "^2.3 || ^3.0.2"
+            },
+            "conflict": {
+                "squizlabs/php_codesniffer": "2.6.2"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.5 || ^5.0 || ^6.0 || ^7.0"
+            },
+            "suggest": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically.",
+                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            },
+            "type": "phpcodesniffer-standard",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Wim Godden",
+                    "homepage": "https://github.com/wimg",
+                    "role": "lead"
+                },
+                {
+                    "name": "Juliette Reinders Folmer",
+                    "homepage": "https://github.com/jrfnl",
+                    "role": "lead"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/PHPCompatibility/PHPCompatibility/graphs/contributors"
+                }
+            ],
+            "description": "A set of sniffs for PHP_CodeSniffer that checks for PHP cross-version compatibility.",
+            "homepage": "http://techblog.wimgodden.be/tag/codesniffer/",
+            "keywords": [
+                "compatibility",
+                "phpcs",
+                "standards"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
+                "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+            },
+            "time": "2019-12-27T09:44:58+00:00"
+        },
+        {
+            "name": "phpcompatibility/phpcompatibility-paragonie",
+            "version": "1.3.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
+                "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+                "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+                "shasum": ""
+            },
+            "require": {
+                "phpcompatibility/php-compatibility": "^9.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+                "paragonie/random_compat": "dev-master",
+                "paragonie/sodium_compat": "dev-master"
+            },
+            "suggest": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            },
+            "type": "phpcodesniffer-standard",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Wim Godden",
+                    "role": "lead"
+                },
+                {
+                    "name": "Juliette Reinders Folmer",
+                    "role": "lead"
+                }
+            ],
+            "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
+            "homepage": "http://phpcompatibility.com/",
+            "keywords": [
+                "compatibility",
+                "paragonie",
+                "phpcs",
+                "polyfill",
+                "standards",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
+                "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy",
+                "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/PHPCompatibility",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/jrfnl",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-04-24T21:30:46+00:00"
+        },
+        {
+            "name": "phpcompatibility/phpcompatibility-wp",
+            "version": "2.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
+                "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/01c1ff2704a58e46f0cb1ca9d06aee07b3589082",
+                "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082",
+                "shasum": ""
+            },
+            "require": {
+                "phpcompatibility/php-compatibility": "^9.0",
+                "phpcompatibility/phpcompatibility-paragonie": "^1.0"
+            },
+            "require-dev": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^1.0"
+            },
+            "suggest": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
+                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            },
+            "type": "phpcodesniffer-standard",
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Wim Godden",
+                    "role": "lead"
+                },
+                {
+                    "name": "Juliette Reinders Folmer",
+                    "role": "lead"
+                }
+            ],
+            "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
+            "homepage": "http://phpcompatibility.com/",
+            "keywords": [
+                "compatibility",
+                "phpcs",
+                "standards",
+                "static analysis",
+                "wordpress"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
+                "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy",
+                "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/PHPCompatibility",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/jrfnl",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-04-24T21:37:59+00:00"
+        },
+        {
+            "name": "phpcsstandards/phpcsextra",
+            "version": "1.2.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
+                "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+                "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.4",
+                "phpcsstandards/phpcsutils": "^1.0.9",
+                "squizlabs/php_codesniffer": "^3.8.0"
+            },
+            "require-dev": {
+                "php-parallel-lint/php-console-highlighter": "^1.0",
+                "php-parallel-lint/php-parallel-lint": "^1.3.2",
+                "phpcsstandards/phpcsdevcs": "^1.1.6",
+                "phpcsstandards/phpcsdevtools": "^1.2.1",
+                "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+            },
+            "type": "phpcodesniffer-standard",
+            "extra": {
+                "branch-alias": {
+                    "dev-stable": "1.x-dev",
+                    "dev-develop": "1.x-dev"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Juliette Reinders Folmer",
+                    "homepage": "https://github.com/jrfnl",
+                    "role": "lead"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
+                }
+            ],
+            "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
+            "keywords": [
+                "PHP_CodeSniffer",
+                "phpcbf",
+                "phpcodesniffer-standard",
+                "phpcs",
+                "standards",
+                "static analysis"
+            ],
+            "support": {
+                "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
+                "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
+                "source": "https://github.com/PHPCSStandards/PHPCSExtra"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/PHPCSStandards",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/jrfnl",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2023-12-08T16:49:07+00:00"
+        },
+        {
+            "name": "phpcsstandards/phpcsutils",
+            "version": "1.0.12",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
+                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c",
+                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c",
+                "shasum": ""
+            },
+            "require": {
+                "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
+                "php": ">=5.4",
+                "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev"
+            },
+            "require-dev": {
+                "ext-filter": "*",
+                "php-parallel-lint/php-console-highlighter": "^1.0",
+                "php-parallel-lint/php-parallel-lint": "^1.3.2",
+                "phpcsstandards/phpcsdevcs": "^1.1.6",
+                "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0"
+            },
+            "type": "phpcodesniffer-standard",
+            "extra": {
+                "branch-alias": {
+                    "dev-stable": "1.x-dev",
+                    "dev-develop": "1.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "PHPCSUtils/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "LGPL-3.0-or-later"
+            ],
+            "authors": [
+                {
+                    "name": "Juliette Reinders Folmer",
+                    "homepage": "https://github.com/jrfnl",
+                    "role": "lead"
+                },
+                {
+                    "name": "Contributors",
+                    "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
+                }
+            ],
+            "description": "A suite of utility functions for use with PHP_CodeSniffer",
+            "homepage": "https://phpcsutils.com/",
+            "keywords": [
+                "PHP_CodeSniffer",
+                "phpcbf",
+                "phpcodesniffer-standard",
+                "phpcs",
+                "phpcs3",
+                "standards",
+                "static analysis",
+                "tokens",
+                "utility"
+            ],
+            "support": {
+                "docs": "https://phpcsutils.com/",
+                "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
+                "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
+                "source": "https://github.com/PHPCSStandards/PHPCSUtils"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/PHPCSStandards",
+                    "type": "github"
+                },
+                {
+                    "url": "https://github.com/jrfnl",
+                    "type": "github"
+                },
+                {
+                    "url": "https://opencollective.com/php_codesniffer",
+                    "type": "open_collective"
+                }
+            ],
+            "time": "2024-05-20T13:34:27+00:00"
+        },
+        {
+            "name": "phpunit/php-code-coverage",
+            "version": "9.2.32",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
+                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5",
+                "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-libxml": "*",
+                "ext-xmlwriter": "*",
+                "nikic/php-parser": "^4.19.1 || ^5.1.0",
+                "php": ">=7.3",
+                "phpunit/php-file-iterator": "^3.0.6",
+                "phpunit/php-text-template": "^2.0.4",
+                "sebastian/code-unit-reverse-lookup": "^2.0.3",
+                "sebastian/complexity": "^2.0.3",
+                "sebastian/environment": "^5.1.5",
+                "sebastian/lines-of-code": "^1.0.4",
+                "sebastian/version": "^3.0.2",
+                "theseer/tokenizer": "^1.2.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.6"
+            },
+            "suggest": {
+                "ext-pcov": "PHP extension that provides line coverage",
+                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "9.2.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
+            "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
+            "keywords": [
+                "coverage",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+                "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+                "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-08-22T04:23:01+00:00"
+        },
+        {
+            "name": "phpunit/php-file-iterator",
+            "version": "3.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "FilterIterator implementation that filters files based on a list of suffixes.",
+            "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
+            "keywords": [
+                "filesystem",
+                "iterator"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+                "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2021-12-02T12:48:52+00:00"
+        },
+        {
+            "name": "phpunit/php-invoker",
+            "version": "3.1.1",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-invoker.git",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "ext-pcntl": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-pcntl": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "3.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Invoke callables with a timeout",
+            "homepage": "https://github.com/sebastianbergmann/php-invoker/",
+            "keywords": [
+                "process"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-invoker/issues",
+                "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:58:55+00:00"
+        },
+        {
+            "name": "phpunit/php-text-template",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-text-template.git",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Simple template engine.",
+            "homepage": "https://github.com/sebastianbergmann/php-text-template/",
+            "keywords": [
+                "template"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+                "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T05:33:50+00:00"
+        },
+        {
+            "name": "phpunit/php-timer",
+            "version": "5.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/php-timer.git",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Utility class for timing",
+            "homepage": "https://github.com/sebastianbergmann/php-timer/",
+            "keywords": [
+                "timer"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+                "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:16:10+00:00"
+        },
+        {
+            "name": "phpunit/phpunit",
+            "version": "9.6.22",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/phpunit.git",
+                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
+                "reference": "f80235cb4d3caa59ae09be3adf1ded27521d1a9c",
+                "shasum": ""
+            },
+            "require": {
+                "doctrine/instantiator": "^1.5.0 || ^2",
+                "ext-dom": "*",
+                "ext-json": "*",
+                "ext-libxml": "*",
+                "ext-mbstring": "*",
+                "ext-xml": "*",
+                "ext-xmlwriter": "*",
+                "myclabs/deep-copy": "^1.12.1",
+                "phar-io/manifest": "^2.0.4",
+                "phar-io/version": "^3.2.1",
+                "php": ">=7.3",
+                "phpunit/php-code-coverage": "^9.2.32",
+                "phpunit/php-file-iterator": "^3.0.6",
+                "phpunit/php-invoker": "^3.1.1",
+                "phpunit/php-text-template": "^2.0.4",
+                "phpunit/php-timer": "^5.0.3",
+                "sebastian/cli-parser": "^1.0.2",
+                "sebastian/code-unit": "^1.0.8",
+                "sebastian/comparator": "^4.0.8",
+                "sebastian/diff": "^4.0.6",
+                "sebastian/environment": "^5.1.5",
+                "sebastian/exporter": "^4.0.6",
+                "sebastian/global-state": "^5.0.7",
+                "sebastian/object-enumerator": "^4.0.4",
+                "sebastian/resource-operations": "^3.0.4",
+                "sebastian/type": "^3.2.1",
+                "sebastian/version": "^3.0.2"
+            },
+            "suggest": {
+                "ext-soap": "To be able to generate mocks based on WSDL files",
+                "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage"
+            },
+            "bin": [
+                "phpunit"
+            ],
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "9.6-dev"
+                }
+            },
+            "autoload": {
+                "files": [
+                    "src/Framework/Assert/Functions.php"
+                ],
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "The PHP Unit Testing framework.",
+            "homepage": "https://phpunit.de/",
+            "keywords": [
+                "phpunit",
+                "testing",
+                "xunit"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+                "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
+                "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.22"
+            },
+            "funding": [
+                {
+                    "url": "https://phpunit.de/sponsors.html",
+                    "type": "custom"
+                },
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                },
+                {
+                    "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit",
+                    "type": "tidelift"
+                }
+            ],
+            "time": "2024-12-05T13:48:26+00:00"
+        },
+        {
+            "name": "sebastian/cli-parser",
+            "version": "1.0.2",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/cli-parser.git",
+                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+                "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for parsing CLI options",
+            "homepage": "https://github.com/sebastianbergmann/cli-parser",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/cli-parser/issues",
+                "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T06:27:43+00:00"
+        },
+        {
+            "name": "sebastian/code-unit",
+            "version": "1.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit.git",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Collection of value objects that represent the PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/code-unit",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:08:54+00:00"
+        },
+        {
+            "name": "sebastian/code-unit-reverse-lookup",
+            "version": "2.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Looks up which function or method a line of code belongs to",
+            "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
+                "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-09-28T05:30:19+00:00"
+        },
+        {
+            "name": "sebastian/comparator",
+            "version": "4.0.8",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/comparator.git",
+                "reference": "fa0f136dd2334583309d32b62544682ee972b51a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a",
+                "reference": "fa0f136dd2334583309d32b62544682ee972b51a",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/diff": "^4.0",
+                "sebastian/exporter": "^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@2bepublished.at"
+                }
+            ],
+            "description": "Provides the functionality to compare PHP values for equality",
+            "homepage": "https://github.com/sebastianbergmann/comparator",
+            "keywords": [
+                "comparator",
+                "compare",
+                "equality"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/comparator/issues",
+                "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2022-09-14T12:41:17+00:00"
+        },
+        {
+            "name": "sebastian/complexity",
+            "version": "2.0.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/complexity.git",
+                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
+                "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for calculating the complexity of PHP code units",
+            "homepage": "https://github.com/sebastianbergmann/complexity",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/complexity/issues",
+                "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-12-22T06:19:30+00:00"
+        },
+        {
+            "name": "sebastian/diff",
+            "version": "4.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/diff.git",
+                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc",
+                "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3",
+                "symfony/process": "^4.2 || ^5"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Kore Nordmann",
+                    "email": "mail@kore-nordmann.de"
+                }
+            ],
+            "description": "Diff implementation",
+            "homepage": "https://github.com/sebastianbergmann/diff",
+            "keywords": [
+                "diff",
+                "udiff",
+                "unidiff",
+                "unified diff"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/diff/issues",
+                "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T06:30:58+00:00"
+        },
+        {
+            "name": "sebastian/environment",
+            "version": "5.1.5",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/environment.git",
+                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+                "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-posix": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.1-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Provides functionality to handle HHVM/PHP environments",
+            "homepage": "http://www.github.com/sebastianbergmann/environment",
+            "keywords": [
+                "Xdebug",
+                "environment",
+                "hhvm"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/environment/issues",
+                "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-02-03T06:03:51+00:00"
+        },
+        {
+            "name": "sebastian/exporter",
+            "version": "4.0.6",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/exporter.git",
+                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72",
+                "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "ext-mbstring": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Volker Dusch",
+                    "email": "github@wallbash.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                },
+                {
+                    "name": "Bernhard Schussek",
+                    "email": "bschussek@gmail.com"
+                }
+            ],
+            "description": "Provides the functionality to export PHP variables for visualization",
+            "homepage": "https://www.github.com/sebastianbergmann/exporter",
+            "keywords": [
+                "export",
+                "exporter"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/exporter/issues",
+                "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T06:33:00+00:00"
+        },
+        {
+            "name": "sebastian/global-state",
+            "version": "5.0.7",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/global-state.git",
+                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+                "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "ext-dom": "*",
+                "phpunit/phpunit": "^9.3"
+            },
+            "suggest": {
+                "ext-uopz": "*"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "5.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Snapshotting of global state",
+            "homepage": "http://www.github.com/sebastianbergmann/global-state",
+            "keywords": [
+                "global state"
+            ],
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/global-state/issues",
+                "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-02T06:35:11+00:00"
+        },
+        {
+            "name": "sebastian/lines-of-code",
+            "version": "1.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/lines-of-code.git",
+                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+                "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
+                "shasum": ""
+            },
+            "require": {
+                "nikic/php-parser": "^4.18 || ^5.0",
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
+                    "role": "lead"
+                }
+            ],
+            "description": "Library for counting the lines of code in PHP source code",
+            "homepage": "https://github.com/sebastianbergmann/lines-of-code",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/lines-of-code/issues",
+                "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2023-12-22T06:20:34+00:00"
+        },
+        {
+            "name": "sebastian/object-enumerator",
+            "version": "4.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-enumerator.git",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71",
+                "reference": "5c9eeac41b290a3712d88851518825ad78f45c71",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3",
+                "sebastian/object-reflector": "^2.0",
+                "sebastian/recursion-context": "^4.0"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
+            ],
+            "description": "Traverses array structures and object graphs to enumerate all referenced objects",
+            "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
+            "support": {
+                "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
+                "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:12:34+00:00"
+        },
+        {
+            "name": "sebastian/object-reflector",
+            "version": "2.0.4",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/object-reflector.git",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=7.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "^9.3"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "2.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                }
             ],
+            "description": "Allows reflection of object attributes, including inherited and non-public ones",
+            "homepage": "https://github.com/sebastianbergmann/object-reflector/",
             "support": {
-                "issues": "https://github.com/PHPCompatibility/PHPCompatibility/issues",
-                "source": "https://github.com/PHPCompatibility/PHPCompatibility"
+                "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
+                "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4"
             },
-            "time": "2019-12-27T09:44:58+00:00"
+            "funding": [
+                {
+                    "url": "https://github.com/sebastianbergmann",
+                    "type": "github"
+                }
+            ],
+            "time": "2020-10-26T13:14:26+00:00"
         },
         {
-            "name": "phpcompatibility/phpcompatibility-paragonie",
-            "version": "1.3.3",
+            "name": "sebastian/recursion-context",
+            "version": "4.0.5",
             "source": {
                 "type": "git",
-                "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git",
-                "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac"
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
-                "reference": "293975b465e0e709b571cbf0c957c6c0a7b9a2ac",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
+                "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1",
                 "shasum": ""
             },
             "require": {
-                "phpcompatibility/php-compatibility": "^9.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
-                "paragonie/random_compat": "dev-master",
-                "paragonie/sodium_compat": "dev-master"
+                "phpunit/phpunit": "^9.3"
             },
-            "suggest": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
-                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "4.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
             },
-            "type": "phpcodesniffer-standard",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0-or-later"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Wim Godden",
-                    "role": "lead"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 },
                 {
-                    "name": "Juliette Reinders Folmer",
-                    "role": "lead"
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
                 }
             ],
-            "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.",
-            "homepage": "http://phpcompatibility.com/",
-            "keywords": [
-                "compatibility",
-                "paragonie",
-                "phpcs",
-                "polyfill",
-                "standards",
-                "static analysis"
-            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "https://github.com/sebastianbergmann/recursion-context",
             "support": {
-                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues",
-                "security": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/security/policy",
-                "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie"
+                "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+                "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5"
             },
             "funding": [
                 {
-                    "url": "https://github.com/PHPCompatibility",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/jrfnl",
+                    "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/php_codesniffer",
-                    "type": "open_collective"
                 }
             ],
-            "time": "2024-04-24T21:30:46+00:00"
+            "time": "2023-02-03T06:07:39+00:00"
         },
         {
-            "name": "phpcompatibility/phpcompatibility-wp",
-            "version": "2.1.5",
+            "name": "sebastian/resource-operations",
+            "version": "3.0.4",
             "source": {
                 "type": "git",
-                "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git",
-                "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082"
+                "url": "https://github.com/sebastianbergmann/resource-operations.git",
+                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/01c1ff2704a58e46f0cb1ca9d06aee07b3589082",
-                "reference": "01c1ff2704a58e46f0cb1ca9d06aee07b3589082",
+                "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
+                "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e",
                 "shasum": ""
             },
             "require": {
-                "phpcompatibility/php-compatibility": "^9.0",
-                "phpcompatibility/phpcompatibility-paragonie": "^1.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^1.0"
+                "phpunit/phpunit": "^9.0"
             },
-            "suggest": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^1.0 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.",
-                "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues."
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-main": "3.0-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
             },
-            "type": "phpcodesniffer-standard",
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0-or-later"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Wim Godden",
-                    "role": "lead"
-                },
-                {
-                    "name": "Juliette Reinders Folmer",
-                    "role": "lead"
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
                 }
             ],
-            "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.",
-            "homepage": "http://phpcompatibility.com/",
-            "keywords": [
-                "compatibility",
-                "phpcs",
-                "standards",
-                "static analysis",
-                "wordpress"
-            ],
+            "description": "Provides a list of PHP built-in functions that operate on resources",
+            "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
             "support": {
-                "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues",
-                "security": "https://github.com/PHPCompatibility/PHPCompatibilityWP/security/policy",
-                "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP"
+                "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4"
             },
             "funding": [
                 {
-                    "url": "https://github.com/PHPCompatibility",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/jrfnl",
+                    "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/php_codesniffer",
-                    "type": "open_collective"
                 }
             ],
-            "time": "2024-04-24T21:37:59+00:00"
+            "time": "2024-03-14T16:00:52+00:00"
         },
         {
-            "name": "phpcsstandards/phpcsextra",
-            "version": "1.2.1",
+            "name": "sebastian/type",
+            "version": "3.2.1",
             "source": {
                 "type": "git",
-                "url": "https://github.com/PHPCSStandards/PHPCSExtra.git",
-                "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489"
+                "url": "https://github.com/sebastianbergmann/type.git",
+                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
-                "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489",
+                "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
+                "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.4",
-                "phpcsstandards/phpcsutils": "^1.0.9",
-                "squizlabs/php_codesniffer": "^3.8.0"
+                "php": ">=7.3"
             },
             "require-dev": {
-                "php-parallel-lint/php-console-highlighter": "^1.0",
-                "php-parallel-lint/php-parallel-lint": "^1.3.2",
-                "phpcsstandards/phpcsdevcs": "^1.1.6",
-                "phpcsstandards/phpcsdevtools": "^1.2.1",
-                "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+                "phpunit/phpunit": "^9.5"
             },
-            "type": "phpcodesniffer-standard",
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-stable": "1.x-dev",
-                    "dev-develop": "1.x-dev"
+                    "dev-master": "3.2-dev"
                 }
             },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0-or-later"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Juliette Reinders Folmer",
-                    "homepage": "https://github.com/jrfnl",
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
                     "role": "lead"
-                },
-                {
-                    "name": "Contributors",
-                    "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors"
                 }
             ],
-            "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.",
-            "keywords": [
-                "PHP_CodeSniffer",
-                "phpcbf",
-                "phpcodesniffer-standard",
-                "phpcs",
-                "standards",
-                "static analysis"
-            ],
+            "description": "Collection of value objects that represent the types of the PHP type system",
+            "homepage": "https://github.com/sebastianbergmann/type",
             "support": {
-                "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues",
-                "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy",
-                "source": "https://github.com/PHPCSStandards/PHPCSExtra"
+                "issues": "https://github.com/sebastianbergmann/type/issues",
+                "source": "https://github.com/sebastianbergmann/type/tree/3.2.1"
             },
             "funding": [
                 {
-                    "url": "https://github.com/PHPCSStandards",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/jrfnl",
+                    "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/php_codesniffer",
-                    "type": "open_collective"
                 }
             ],
-            "time": "2023-12-08T16:49:07+00:00"
+            "time": "2023-02-03T06:13:03+00:00"
         },
         {
-            "name": "phpcsstandards/phpcsutils",
-            "version": "1.0.12",
+            "name": "sebastian/version",
+            "version": "3.0.2",
             "source": {
                 "type": "git",
-                "url": "https://github.com/PHPCSStandards/PHPCSUtils.git",
-                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c"
+                "url": "https://github.com/sebastianbergmann/version.git",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/87b233b00daf83fb70f40c9a28692be017ea7c6c",
-                "reference": "87b233b00daf83fb70f40c9a28692be017ea7c6c",
+                "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c",
+                "reference": "c6c1022351a901512170118436c764e473f6de8c",
                 "shasum": ""
             },
             "require": {
-                "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0",
-                "php": ">=5.4",
-                "squizlabs/php_codesniffer": "^3.10.0 || 4.0.x-dev@dev"
+                "php": ">=7.3"
             },
-            "require-dev": {
-                "ext-filter": "*",
-                "php-parallel-lint/php-console-highlighter": "^1.0",
-                "php-parallel-lint/php-parallel-lint": "^1.3.2",
-                "phpcsstandards/phpcsdevcs": "^1.1.6",
-                "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0"
-            },
-            "type": "phpcodesniffer-standard",
+            "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-stable": "1.x-dev",
-                    "dev-develop": "1.x-dev"
+                    "dev-master": "3.0-dev"
                 }
             },
             "autoload": {
                 "classmap": [
-                    "PHPCSUtils/"
+                    "src/"
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPL-3.0-or-later"
+                "BSD-3-Clause"
             ],
             "authors": [
                 {
-                    "name": "Juliette Reinders Folmer",
-                    "homepage": "https://github.com/jrfnl",
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de",
                     "role": "lead"
-                },
-                {
-                    "name": "Contributors",
-                    "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors"
                 }
             ],
-            "description": "A suite of utility functions for use with PHP_CodeSniffer",
-            "homepage": "https://phpcsutils.com/",
-            "keywords": [
-                "PHP_CodeSniffer",
-                "phpcbf",
-                "phpcodesniffer-standard",
-                "phpcs",
-                "phpcs3",
-                "standards",
-                "static analysis",
-                "tokens",
-                "utility"
-            ],
+            "description": "Library that helps with managing the version number of Git-hosted PHP projects",
+            "homepage": "https://github.com/sebastianbergmann/version",
             "support": {
-                "docs": "https://phpcsutils.com/",
-                "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues",
-                "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy",
-                "source": "https://github.com/PHPCSStandards/PHPCSUtils"
+                "issues": "https://github.com/sebastianbergmann/version/issues",
+                "source": "https://github.com/sebastianbergmann/version/tree/3.0.2"
             },
             "funding": [
                 {
-                    "url": "https://github.com/PHPCSStandards",
-                    "type": "github"
-                },
-                {
-                    "url": "https://github.com/jrfnl",
+                    "url": "https://github.com/sebastianbergmann",
                     "type": "github"
-                },
-                {
-                    "url": "https://opencollective.com/php_codesniffer",
-                    "type": "open_collective"
                 }
             ],
-            "time": "2024-05-20T13:34:27+00:00"
+            "time": "2020-09-28T06:39:44+00:00"
         },
         {
             "name": "squizlabs/php_codesniffer",
@@ -1380,6 +3307,56 @@
             ],
             "time": "2024-12-11T16:04:26+00:00"
         },
+        {
+            "name": "theseer/tokenizer",
+            "version": "1.2.3",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/theseer/tokenizer.git",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2",
+                "shasum": ""
+            },
+            "require": {
+                "ext-dom": "*",
+                "ext-tokenizer": "*",
+                "ext-xmlwriter": "*",
+                "php": "^7.2 || ^8.0"
+            },
+            "type": "library",
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Arne Blankerts",
+                    "email": "arne@blankerts.de",
+                    "role": "Developer"
+                }
+            ],
+            "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
+            "support": {
+                "issues": "https://github.com/theseer/tokenizer/issues",
+                "source": "https://github.com/theseer/tokenizer/tree/1.2.3"
+            },
+            "funding": [
+                {
+                    "url": "https://github.com/theseer",
+                    "type": "github"
+                }
+            ],
+            "time": "2024-03-03T12:36:25+00:00"
+        },
         {
             "name": "wp-coding-standards/wpcs",
             "version": "3.1.0",
@@ -1454,5 +3431,5 @@
     "prefer-lowest": false,
     "platform": [],
     "platform-dev": [],
-    "plugin-api-version": "2.3.0"
+    "plugin-api-version": "2.6.0"
 }
diff --git a/includes/HealthChecks.php b/includes/HealthChecks.php
new file mode 100644
index 0000000..23b2194
--- /dev/null
+++ b/includes/HealthChecks.php
@@ -0,0 +1,89 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance;
+
+use NewfoldLabs\WP\Module\Performance\HealthChecks\AutosaveIntervalHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\BrowserCachingHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\CloudflareHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\ConcatenateCssHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\ConcatenateJsHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\CronLockTimeoutHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\DeferNonEssentialJsHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\EmptyTrashDaysHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\LazyLoadingHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\LinkPrefetchHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\PageCachingHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\PermalinksHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\PersistentObjectCacheHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\PostRevisionsHealthCheck;
+use NewfoldLabs\WP\Module\Performance\HealthChecks\PrioritizeCssHealthCheck;
+
+/**
+ * Add performance health checks.
+ */
+class HealthChecks {
+	/**
+	 * Container.
+	 *
+	 * @var Container
+	 */
+	private $container;
+
+	/**
+	 * Constructor.
+	 *
+	 * @param Container $container Container.
+	 */
+	public function __construct( $container ) {
+		$this->container = $container;
+		if ( function_exists( 'add_filter' ) ) {
+			$this->add_hooks();
+		}
+	}
+
+	/**
+	 * Add hooks.
+	 */
+	public function add_hooks() {
+		add_filter( 'site_status_tests', array( $this, 'add_health_checks' ) );
+	}
+
+	/**
+	 * Add health checks.
+	 *
+	 * @param array $tests Site status tests.
+	 *
+	 * @return array Site status tests.
+	 */
+	public function add_health_checks( $tests ) {
+		$health_checks = array(
+			new AutosaveIntervalHealthCheck(),
+			new PostRevisionsHealthCheck(),
+			new AutosaveIntervalHealthCheck(),
+			new BrowserCachingHealthCheck(),
+			new CloudflareHealthCheck(),
+			new ConcatenateCssHealthCheck(),
+			new ConcatenateJsHealthCheck(),
+			new CronLockTimeoutHealthCheck(),
+			new DeferNonEssentialJsHealthCheck(),
+			new EmptyTrashDaysHealthCheck(),
+			new LazyLoadingHealthCheck(),
+			new LinkPrefetchHealthCheck(),
+			new PageCachingHealthCheck(),
+			new PermalinksHealthCheck(),
+			new PostRevisionsHealthCheck(),
+			new PrioritizeCssHealthCheck(),
+		);
+
+		// Override the core persistent object cache health check, but only for Bluehost.
+		if ( 'bluehost' === $this->container->plugin()->brand ) {
+			$health_checks[] = new PersistentObjectCacheHealthCheck();
+		}
+
+		foreach ( $health_checks as $health_check ) {
+			$tests = $health_check->register_health_check( $tests );
+		}
+
+		return $tests;
+	}
+}
diff --git a/includes/HealthChecks/AutosaveIntervalHealthCheck.php b/includes/HealthChecks/AutosaveIntervalHealthCheck.php
new file mode 100644
index 0000000..3c4beef
--- /dev/null
+++ b/includes/HealthChecks/AutosaveIntervalHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for the autosave interval.
+ */
+class AutosaveIntervalHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-autosave-interval';
+		$this->title        = esc_html__( 'Autosave Interval', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Autosaving is set to happen every 30 seconds or more', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Autosaving is set to be frequent, less than every 30 seconds', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Setting the autosave interval to a longer period can reduce server load. It is recommended to set it to 30 seconds or more.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test the autosave interval.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return defined( 'AUTOSAVE_INTERVAL' ) && constant( 'AUTOSAVE_INTERVAL' ) >= 30;
+	}
+}
diff --git a/includes/HealthChecks/BrowserCachingHealthCheck.php b/includes/HealthChecks/BrowserCachingHealthCheck.php
new file mode 100644
index 0000000..32a844f
--- /dev/null
+++ b/includes/HealthChecks/BrowserCachingHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for browser caching.
+ */
+class BrowserCachingHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-browser-caching';
+		$this->title        = esc_html__( 'Browser Caching', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Browser caching is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Browser caching is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Enabling browser caching can improve performance by storing static assets in the browser for faster page loads.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if browser caching is enabled.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return get_option( 'newfold_cache_level' ) >= 1;
+	}
+}
diff --git a/includes/HealthChecks/CloudflareHealthCheck.php b/includes/HealthChecks/CloudflareHealthCheck.php
new file mode 100644
index 0000000..ac4d97e
--- /dev/null
+++ b/includes/HealthChecks/CloudflareHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for Cloudflare.
+ */
+class CloudflareHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-cloudflare';
+		$this->title        = esc_html__( 'Cloudflare enabled', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Cloudflare integration is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Cloudflare integration is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Cloudflare integration can improve performance and security.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test for Cloudflare integration.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return isset( $_SERVER['HTTP_CF_RAY'] );
+	}
+}
diff --git a/includes/HealthChecks/ConcatenateCssHealthCheck.php b/includes/HealthChecks/ConcatenateCssHealthCheck.php
new file mode 100644
index 0000000..e7a3be8
--- /dev/null
+++ b/includes/HealthChecks/ConcatenateCssHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for CSS concatenation.
+ */
+class ConcatenateCSSHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-concatenate-css';
+		$this->title        = esc_html__( 'Concatenate CSS', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'CSS files are concatenated', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'CSS files are not concatenated', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Concatenating CSS can improve performance by reducing the number of requests.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if CSS files are concatenated.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return ! empty( get_option( 'jetpack_boost_status_minify-css', array() ) );
+	}
+}
diff --git a/includes/HealthChecks/ConcatenateJsHealthCheck.php b/includes/HealthChecks/ConcatenateJsHealthCheck.php
new file mode 100644
index 0000000..1b7f58e
--- /dev/null
+++ b/includes/HealthChecks/ConcatenateJsHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for JavaScript concatenation.
+ */
+class ConcatenateJsHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-concatenate-js';
+		$this->title        = esc_html__( 'Concatenate JavaScript', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'JavaScript files are concatenated', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'JavaScript files are not concatenated', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Concatenating JavaScript can improve performance by reducing the number of requests.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if JavaScript files are concatenated.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return ! empty( get_option( 'jetpack_boost_status_minify-js', array() ) );
+	}
+}
diff --git a/includes/HealthChecks/CronLockTimeoutHealthCheck.php b/includes/HealthChecks/CronLockTimeoutHealthCheck.php
new file mode 100644
index 0000000..b57066d
--- /dev/null
+++ b/includes/HealthChecks/CronLockTimeoutHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for WP Cron lock timeout.
+ */
+class CronLockTimeoutHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'wp-cron-lock-timeout';
+		$this->title        = esc_html__( 'WP Cron Lock Timeout', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Cron lock timeout is set to 60 seconds or less.', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Cron lock timeout is set to a high number.', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Cron lock timeout affects how long a cron job can run for. Setting it to a lower number can improve performance.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test the WP Cron lock timeout setting.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return defined( 'WP_CRON_LOCK_TIMEOUT' ) && constant( 'WP_CRON_LOCK_TIMEOUT' ) <= 300;
+	}
+}
diff --git a/includes/HealthChecks/DeferNonEssentialJsHealthCheck.php b/includes/HealthChecks/DeferNonEssentialJsHealthCheck.php
new file mode 100644
index 0000000..cd5fc25
--- /dev/null
+++ b/includes/HealthChecks/DeferNonEssentialJsHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for deferring non-essential JavaScript.
+ */
+class DeferNonEssentialJsHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-defer-non-essential-js';
+		$this->title        = esc_html__( 'Defer Non-Essential JavaScript', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Non-essential JavaScript is deferred', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Non-essential JavaScript is not deferred', 'wp-module-performance' );
+		$this->description  = esc_html__( 'JavaScript can be deferred to improve performance by loading it after the page has loaded.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if non-essential JavaScript is deferred.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return get_option( 'jetpack_boost_status_render-blocking-js', false );
+	}
+}
diff --git a/includes/HealthChecks/EmptyTrashDaysHealthCheck.php b/includes/HealthChecks/EmptyTrashDaysHealthCheck.php
new file mode 100644
index 0000000..90f21a4
--- /dev/null
+++ b/includes/HealthChecks/EmptyTrashDaysHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for empty trash days.
+ */
+class EmptyTrashDaysHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-empty-trash-days';
+		$this->title        = esc_html__( 'Empty Trash Days', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Trash is emptied every 30 days or less', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Trash is emptied less frequently than every 30 days.', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Emptying the trash more frequently can reduce database bloat.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test the empty trash days setting.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return defined( 'EMPTY_TRASH_DAYS' ) && constant( 'EMPTY_TRASH_DAYS' ) <= 30;
+	}
+}
diff --git a/includes/HealthChecks/HealthCheck.php b/includes/HealthChecks/HealthCheck.php
new file mode 100644
index 0000000..7b5667d
--- /dev/null
+++ b/includes/HealthChecks/HealthCheck.php
@@ -0,0 +1,107 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Abstract class for a health check.
+ */
+abstract class HealthCheck {
+	/**
+	 * Health check ID.
+	 *
+	 * @var string
+	 */
+	public $id;
+
+	/**
+	 * Health check title.
+	 *
+	 * @var string
+	 */
+	public $title;
+
+	/**
+	 * Health check passing text.
+	 *
+	 * @var string
+	 */
+	public $passing_text;
+
+	/**
+	 * Health check failing text.
+	 *
+	 * @var string
+	 */
+	public $failing_text;
+
+	/**
+	 * Health check description.
+	 *
+	 * @var string
+	 */
+	public $description;
+
+	/**
+	 * Health check description actions.
+	 *
+	 * @var string
+	 */
+	public $actions;
+
+	/**
+	 * Health check badge color.
+	 *
+	 * @var string
+	 */
+	public $badge_color = 'blue';
+
+	/**
+	 * Health check test.
+	 *
+	 * @var bool Test result.
+	 */
+	public function test() {
+		return true;
+	}
+
+	/**
+	 * Register the health check with the manager.
+	 *
+	 * @param array $tests Site Health tests.
+	 *
+	 * @return array Site Health tests.
+	 */
+	public function register_health_check( $tests ) {
+		/**
+		 * Filter to easily enable/disable the health check.
+		 *
+		 * @param bool $do_check Whether to run the health check.
+		 */
+		$do_check = apply_filters( 'newfold/features/filter/isEnabled:healthChecks:' . $this->id, true ); // phpcs:ignore WordPress.NamingConventions.ValidHookName
+		if ( ! $do_check ) {
+			return $tests;
+		}
+
+		// Right now, we're only supporting direct health checks.
+		$tests['direct'][ $this->id ] = array(
+			'label' => $this->title,
+			'test'  => function () {
+				$passed = $this->test();
+
+				return array(
+					'label'       => $passed ? $this->passing_text : $this->failing_text,
+					'status'      => $passed ? 'good' : 'recommended',
+					'description' => sprintf( '<p>%s</p>', $this->description ),
+					'actions'     => $this->actions,
+					'test'        => $this->id,
+					'badge'       => array(
+						'label' => __( 'Performance' ), // No text domain, as we want to match the WP core badge text.
+						'color' => $this->badge_color,
+					),
+				);
+			},
+		);
+
+		return $tests;
+	}
+}
diff --git a/includes/HealthChecks/LazyLoadingHealthCheck.php b/includes/HealthChecks/LazyLoadingHealthCheck.php
new file mode 100644
index 0000000..84d2277
--- /dev/null
+++ b/includes/HealthChecks/LazyLoadingHealthCheck.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for lazy loading.
+ */
+class LazyLoadingHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-lazy-loading';
+		$this->title        = esc_html__( 'Lazy Loading', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Lazy loading is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Lazy loading is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Lazy loading can improve performance by only loading images when they are in view.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if lazy loading is enabled.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		$image_optimization = get_option( 'nfd_image_optimization', array() );
+		return isset( $image_optimization['lazy_loading'], $image_optimization['lazy_loading']['enabled'] ) && $image_optimization['lazy_loading']['enabled'];
+	}
+}
diff --git a/includes/HealthChecks/LinkPrefetchHealthCheck.php b/includes/HealthChecks/LinkPrefetchHealthCheck.php
new file mode 100644
index 0000000..ed7acfa
--- /dev/null
+++ b/includes/HealthChecks/LinkPrefetchHealthCheck.php
@@ -0,0 +1,29 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for link prefetching.
+ */
+class LinkPrefetchHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-link-prefetch';
+		$this->title        = esc_html__( 'Link Prefetching', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Link prefetching is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Link prefetching is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Link prefetching can improve performance by loading pages immediately before they are requested.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if link prefetching is enabled.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		$enabled = get_option( 'nfd_link_prefetch_settings', array() );
+		return isset( $enabled['activeOnDesktop'] ) && $enabled['activeOnDesktop'];
+	}
+}
diff --git a/includes/HealthChecks/PageCachingHealthCheck.php b/includes/HealthChecks/PageCachingHealthCheck.php
new file mode 100644
index 0000000..36f3e8a
--- /dev/null
+++ b/includes/HealthChecks/PageCachingHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for page caching.
+ */
+class PageCachingHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-page-caching';
+		$this->title        = esc_html__( 'Page Caching', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Page caching is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Page caching is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Page caching can improve performance by bypassing PHP and database queries for faster page loads.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if page caching is enabled.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return get_option( 'newfold_cache_level' ) >= 2;
+	}
+}
diff --git a/includes/HealthChecks/PermalinksHealthCheck.php b/includes/HealthChecks/PermalinksHealthCheck.php
new file mode 100644
index 0000000..11c1174
--- /dev/null
+++ b/includes/HealthChecks/PermalinksHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for permalinks.
+ */
+class PermalinksHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-permalinks';
+		$this->title        = esc_html__( 'Permalinks', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Permalinks are pretty', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Permalinks are not set up', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Setting permalinks to anything other than plain can improve performance and SEO.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test the permalinks setting.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return ! empty( get_option( 'permalink_structure' ) );
+	}
+}
diff --git a/includes/HealthChecks/PersistentObjectCacheHealthCheck.php b/includes/HealthChecks/PersistentObjectCacheHealthCheck.php
new file mode 100644
index 0000000..0926c0c
--- /dev/null
+++ b/includes/HealthChecks/PersistentObjectCacheHealthCheck.php
@@ -0,0 +1,34 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for persistent object cache.
+ */
+class PersistentObjectCacheHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'persistent_object_cache'; // Same as the core ID so that we can override the core health check.
+		$this->title        = esc_html__( 'Object Caching', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Object caching is enabled', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Object caching is disabled', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Object caching saves results from frequent database queries, reducing load times by avoiding repetitive query processing. Object caching is available in all tiers of Bluehost Cloud.', 'wp-module-performance' );
+		$this->actions      = sprintf(
+			'<a href="%1$s" target="_blank" rel="noopener">%2$s</a><span class="screen-reader-text"> (%3$s)</span><span aria-hidden="true" class="dashicons dashicons-external"></span>',
+			'https://www.bluehost.com/help/article/object-caching',
+			esc_html__( 'Learn more about object caching', 'wp-module-performance' ),
+			__( 'opens in a new tab', 'newfold-module-performance' )
+		);
+	}
+
+	/**
+	 * Test the object cache.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return wp_using_ext_object_cache();
+	}
+}
diff --git a/includes/HealthChecks/PostRevisionsHealthCheck.php b/includes/HealthChecks/PostRevisionsHealthCheck.php
new file mode 100644
index 0000000..d1a2e57
--- /dev/null
+++ b/includes/HealthChecks/PostRevisionsHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for post revisions.
+ */
+class PostRevisionsHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-post-revisions';
+		$this->title        = esc_html__( 'Post Revisions', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Number of post revisions is limited to 5 or less', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Number of post revisions is set to a high number', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Setting the number of post revisions to a lower number can reduce database bloat.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test the number of post revisions.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return defined( 'WP_POST_REVISIONS' ) && constant( 'WP_POST_REVISIONS' ) <= 5;
+	}
+}
diff --git a/includes/HealthChecks/PrioritizeCssHealthCheck.php b/includes/HealthChecks/PrioritizeCssHealthCheck.php
new file mode 100644
index 0000000..969c32d
--- /dev/null
+++ b/includes/HealthChecks/PrioritizeCssHealthCheck.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+/**
+ * Health check for critical CSS prioritization.
+ */
+class PrioritizeCssHealthCheck extends HealthCheck {
+	/**
+	 * Constructor.
+	 */
+	public function __construct() {
+		$this->id           = 'newfold-prioritize-critical-css';
+		$this->title        = esc_html__( 'Prioritize Critical CSS', 'wp-module-performance' );
+		$this->passing_text = esc_html__( 'Critical CSS is prioritized', 'wp-module-performance' );
+		$this->failing_text = esc_html__( 'Critical CSS is not prioritized', 'wp-module-performance' );
+		$this->description  = esc_html__( 'Prioritizing critical CSS can improve performance by loading the most important CSS first.', 'wp-module-performance' );
+	}
+
+	/**
+	 * Test if critical CSS is prioritized.
+	 *
+	 * @return bool
+	 */
+	public function test() {
+		return get_option( 'jetpack_boost_status_critical-css', false );
+	}
+}
diff --git a/includes/Performance.php b/includes/Performance.php
index e414143..19ca7e9 100644
--- a/includes/Performance.php
+++ b/includes/Performance.php
@@ -10,9 +10,7 @@
 use NewfoldLabs\WP\Module\Performance\Images\ImageManager;
 use NewfoldLabs\WP\Module\Performance\RestApi\RestApi;
 use NewfoldLabs\WP\Module\Performance\Data\Constants;
-use NewfoldLabs\WP\Module\Performance\CacheTypes\Browser;
-use NewfoldLabs\WP\Module\Performance\CacheTypes\File;
-use NewfoldLabs\WP\Module\Performance\CacheTypes\Skip404;
+use NewfoldLabs\WP\Module\Performance\HealthChecks;
 
 use Automattic\Jetpack\Current_Plan;
 
@@ -83,13 +81,14 @@ public function __construct( Container $container ) {
 		$cachePurger  = new CachePurgingService( $cacheManager->getInstances() );
 		new Constants( $container );
 		new ImageManager( $container );
-
-		add_action( 'admin_bar_menu', array( $this, 'adminBarMenu' ), 100 );
-		add_action( 'admin_menu', array( $this, 'add_sub_menu_page' ) );
+		new HealthChecks( $container );
 
 		new LinkPrefetch( $container );
 		new CacheExclusion( $container );
 
+		add_action( 'admin_bar_menu', array( $this, 'adminBarMenu' ), 100 );
+		add_action( 'admin_menu', array( $this, 'add_sub_menu_page' ) );
+
 		$container->set( 'cachePurger', $cachePurger );
 
 		$container->set( 'hasMustUsePlugin', file_exists( WPMU_PLUGIN_DIR . '/endurance-page-cache.php' ) );
diff --git a/patchwork.json b/patchwork.json
new file mode 100644
index 0000000..0947abb
--- /dev/null
+++ b/patchwork.json
@@ -0,0 +1,6 @@
+{
+  "redefinable-internals": [
+    "defined",
+    "constant"
+  ]
+}
diff --git a/phpunit.xml b/phpunit.xml
new file mode 100644
index 0000000..729d50f
--- /dev/null
+++ b/phpunit.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+    bootstrap="./tests/phpunit/bootstrap.php"
+    cacheResult="false"
+    colors="true"
+    convertErrorsToExceptions="true"
+    convertNoticesToExceptions="true"
+    convertWarningsToExceptions="true"
+>
+    <php>
+        <ini name="display_errors" value="true"/>
+    </php>
+
+    <testsuites>
+        <testsuite name="Application Test Suite">
+            <directory>tests/phpunit</directory>
+        </testsuite>
+    </testsuites>
+    <filter>
+        <whitelist>
+            <directory suffix=".php">includes/</directory>
+        </whitelist>
+    </filter>
+</phpunit>
diff --git a/tests/phpunit/bootstrap.php b/tests/phpunit/bootstrap.php
new file mode 100644
index 0000000..23bf4b3
--- /dev/null
+++ b/tests/phpunit/bootstrap.php
@@ -0,0 +1,11 @@
+<?php
+
+WP_Mock::activateStrictMode();
+/**
+ * Patchwork allows redefining PHP functions.
+ *
+ * @see patchwork.json
+ * @see https://github.com/antecedent/patchwork
+ */
+WP_Mock::setUsePatchwork( true );
+WP_Mock::bootstrap();
diff --git a/tests/phpunit/includes/HealthChecksTest.php b/tests/phpunit/includes/HealthChecksTest.php
new file mode 100644
index 0000000..65a2a07
--- /dev/null
+++ b/tests/phpunit/includes/HealthChecksTest.php
@@ -0,0 +1,384 @@
+<?php
+
+namespace NewfoldLabs\WP\Module\Performance\HealthChecks;
+
+use WP_Mock;
+use WP_Mock\Tools\TestCase;
+use Patchwork;
+
+/**
+ * Test health checks.
+ */
+class HealthChecksTest extends TestCase {
+
+	/**
+	 * Set up the test environment.
+	 */
+	public function setUp(): void {
+		WP_Mock::setUp();
+		Patchwork\restoreAll(); // Ensure Patchwork starts with a clean slate.
+
+		WP_Mock::passthruFunction( '__' );
+		WP_Mock::passthruFunction( 'esc_html__' );
+	}
+
+	/**
+	 * Tear down the test environment.
+	 */
+	public function tearDown(): void {
+		WP_Mock::tearDown();
+		Patchwork\restoreAll(); // Clean up all redefined functions/constants.
+	}
+
+	/**
+	 * Test AutosaveIntervalHealthCheck.
+	 */
+	public function test_autosave_interval_health_check() {
+		Patchwork\redefine(
+			'defined',
+			function ( $constant_name ) {
+				if ( 'AUTOSAVE_INTERVAL' === $constant_name ) {
+					return true;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'AUTOSAVE_INTERVAL' === $constant_name ) {
+					return 30;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$health_check = new AutosaveIntervalHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Autosave interval should pass when set to 30 seconds or more.' );
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'AUTOSAVE_INTERVAL' === $constant_name ) {
+					return 10;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$this->assertFalse( $health_check->test(), 'Autosave interval should fail when set to less than 30 seconds.' );
+	}
+
+	/**
+	 * Test PostRevisionsHealthCheck.
+	 */
+	public function test_post_revisions_health_check() {
+		Patchwork\redefine(
+			'defined',
+			function ( $constant_name ) {
+				if ( 'WP_POST_REVISIONS' === $constant_name ) {
+					return true;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'WP_POST_REVISIONS' === $constant_name ) {
+					return 5;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$health_check = new PostRevisionsHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Post revisions should pass when limited to 5 or less.' );
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'WP_POST_REVISIONS' === $constant_name ) {
+					return 10;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$this->assertFalse( $health_check->test(), 'Post revisions should fail when set to more than 5.' );
+	}
+
+	/**
+	 * Test EmptyTrashDaysHealthCheck.
+	 */
+	public function test_empty_trash_days_health_check() {
+		Patchwork\redefine(
+			'defined',
+			function ( $constant_name ) {
+				if ( 'EMPTY_TRASH_DAYS' === $constant_name ) {
+					return true;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'EMPTY_TRASH_DAYS' === $constant_name ) {
+					return 30;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$health_check = new EmptyTrashDaysHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Empty trash days should pass when set to 30 days or less.' );
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'EMPTY_TRASH_DAYS' === $constant_name ) {
+					return 31;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$this->assertFalse( $health_check->test(), 'Empty trash days should fail when set to more than 30 days.' );
+	}
+
+	/**
+	 * Test BrowserCachingHealthCheck.
+	 */
+	public function test_browser_caching_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'newfold_cache_level' )
+			->once()
+			->andReturn( 2 );
+
+		$health_check = new BrowserCachingHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Browser caching should pass when newfold_cache_level is 1 or more.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'newfold_cache_level' )
+			->once()
+			->andReturn( 0 );
+
+		$this->assertFalse( $health_check->test(), 'Browser caching should fail when newfold_cache_level is less than 1.' );
+	}
+
+	/**
+	 * Test LazyLoadingHealthCheck.
+	 */
+	public function test_lazy_loading_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'nfd_image_optimization', array() )
+			->once()
+			->andReturn( array( 'lazy_loading' => array( 'enabled' => true ) ) );
+
+		$health_check = new LazyLoadingHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Lazy loading should pass when enabled.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'nfd_image_optimization', array() )
+			->once()
+			->andReturn( array( 'lazy_loading' => array( 'enabled' => false ) ) );
+
+		$this->assertFalse( $health_check->test(), 'Lazy loading should fail when not enabled.' );
+	}
+
+	/**
+	 * Test LinkPrefetchHealthCheck.
+	 */
+	public function test_link_prefetch_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'nfd_link_prefetch_settings', array() )
+			->once()
+			->andReturn( array( 'activeOnDesktop' => true ) );
+
+		$health_check = new LinkPrefetchHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Link prefetch should pass when active on desktop.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'nfd_link_prefetch_settings', array() )
+			->once()
+			->andReturn( array( 'activeOnDesktop' => false ) );
+
+		$this->assertFalse( $health_check->test(), 'Link prefetch should fail when not active on desktop.' );
+	}
+
+	/**
+	 * Test PageCachingHealthCheck.
+	 */
+	public function test_page_caching_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'newfold_cache_level' )
+			->once()
+			->andReturn( 2 );
+
+		$health_check = new PageCachingHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Page caching should pass when newfold_cache_level is 2 or more.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'newfold_cache_level' )
+			->once()
+			->andReturn( 0 );
+
+		$this->assertFalse( $health_check->test(), 'Page caching should fail when newfold_cache_level is less than 2.' );
+	}
+
+	/**
+	 * Test ConcatenateCssHealthCheck.
+	 */
+	public function test_concatenate_css_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_minify-css', false )
+			->once()
+			->andReturn( true );
+
+		$health_check = new ConcatenateCssHealthCheck();
+		$this->assertTrue( $health_check->test(), 'CSS concatenation should pass when enabled.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_minify-css', false )
+			->once()
+			->andReturn( false );
+
+		$this->assertFalse( $health_check->test(), 'CSS concatenation should fail when not enabled.' );
+	}
+
+	/**
+	 * Test ConcatenateJsHealthCheck.
+	 */
+	public function test_concatenate_js_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_minify-js', false )
+			->once()
+			->andReturn( true );
+
+		$health_check = new ConcatenateJsHealthCheck();
+		$this->assertTrue( $health_check->test(), 'JS concatenation should pass when enabled.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_minify-js', false )
+			->once()
+			->andReturn( false );
+
+		$this->assertFalse( $health_check->test(), 'JS concatenation should fail when not enabled.' );
+	}
+
+	/**
+	 * Test CloudflareHealthCheck.
+	 */
+	public function test_cloudflare_health_check() {
+		$_SERVER['HTTP_CF_RAY'] = 'some-value';
+
+		$health_check = new CloudflareHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Cloudflare should pass when HTTP_CF_RAY is set.' );
+
+		unset( $_SERVER['HTTP_CF_RAY'] );
+
+		$this->assertFalse( $health_check->test(), 'Cloudflare should fail when HTTP_CF_RAY is not set.' );
+	}
+
+	/**
+	 * Test PrioritizeCssHealthCheck.
+	 */
+	public function test_prioritize_css_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_critical-css', false )
+			->once()
+			->andReturn( true );
+
+		$health_check = new PrioritizeCssHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Prioritizing critical CSS should pass when enabled.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_critical-css', false )
+			->once()
+			->andReturn( false );
+
+		$this->assertFalse( $health_check->test(), 'Prioritizing critical CSS should fail when not enabled.' );
+	}
+
+	/**
+	 * Test DeferNonEssentialJsHealthCheck.
+	 */
+	public function test_defer_non_essential_js_health_check() {
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_render-blocking-js', false )
+			->once()
+			->andReturn( true );
+
+		$health_check = new DeferNonEssentialJsHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Deferring non-essential JS should pass when enabled.' );
+
+		WP_Mock::userFunction( 'get_option' )
+			->with( 'jetpack_boost_status_render-blocking-js', false )
+			->once()
+			->andReturn( false );
+
+		$this->assertFalse( $health_check->test(), 'Deferring non-essential JS should fail when not enabled.' );
+	}
+
+	/**
+	 * Test PersistentObjectCacheHealthCheck.
+	 */
+	public function test_persistent_object_cache_health_check() {
+		WP_Mock::userFunction( 'wp_using_ext_object_cache' )
+			->once()
+			->andReturn( true );
+
+		$health_check = new PersistentObjectCacheHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Persistent object caching should pass when enabled.' );
+
+		WP_Mock::userFunction( 'wp_using_ext_object_cache' )
+			->once()
+			->andReturn( false );
+
+		$this->assertFalse( $health_check->test(), 'Persistent object caching should fail when not enabled.' );
+	}
+
+	/**
+	 * Test CronLockTimeoutHealthCheck.
+	 */
+	public function test_cron_lock_timeout_health_check() {
+		Patchwork\redefine(
+			'defined',
+			function ( $constant_name ) {
+				if ( 'WP_CRON_LOCK_TIMEOUT' === $constant_name ) {
+					return true;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'WP_CRON_LOCK_TIMEOUT' === $constant_name ) {
+					return 60;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$health_check = new CronLockTimeoutHealthCheck();
+		$this->assertTrue( $health_check->test(), 'Cron lock timeout should pass when set to 60 seconds or less.' );
+
+		Patchwork\redefine(
+			'constant',
+			function ( $constant_name ) {
+				if ( 'WP_CRON_LOCK_TIMEOUT' === $constant_name ) {
+					return 600;
+				}
+				return Patchwork\relay();
+			}
+		);
+
+		$this->assertFalse( $health_check->test(), 'Cron lock timeout should fail when set to more than 60 seconds.' );
+	}
+}