namespace ImageOptimization\Modules\Core\Components;
use ImageOptimization\Classes\Async_Operation\Async_Operation_Hook;
use ImageOptimization\Classes\Logger;
use ImageOptimization\Classes\Migration\{
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
* @param string $migration_name
public function run_migration( string $migration_name ): bool {
$migration_class = Migration_Manager::get_migration( $migration_name );
if ( ! $migration_class ) {
"Migration class for `$migration_name` does not exist."
if ( ! method_exists( $migration_class, 'run' ) || ! is_callable( [ $migration_class, 'run' ] ) ) {
"The run method does not exist or is not static in the class `$migration_class`."
->add_migration_passed( $migration_name )
"The migration `$migration_name` successfully executed."
} catch ( Throwable $t ) {
"Error while running the migration `$migration_name`: " . $t->getMessage()
public function __construct() {
add_action( Async_Operation_Hook::DB_MIGRATION, [ $this, 'run_migration' ] );