::ACTION_SCHEDULER_STORE => static function (ContainerInterface $container) { return ActionScheduler::store(); }, ServicesAbstract::ACTION_SCHEDULER_RUNNER => static function (ContainerInterface $container) { return ActionScheduler::runner(); }, ServicesAbstract::ACTION_SCHEDULER_LOGGER => static function (ContainerInterface $container) { return ActionScheduler::logger(); }, ServicesAbstract::MIGRATIONS_FACTORY => static function (ContainerInterface $container) { return function () use ($container) { $migrations = [ new V30000ActionArgsSchema( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_ACTION_ARGS_SCHEMA) ), new V30000WPCronToActionsScheduler( $container->get(ServicesAbstract::CRON), $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY) ), new V30000ReplaceFooterPlaceholders( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::OPTIONS) ), new V30001RestorePostMeta( $container->get(ServicesAbstract::CRON), $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::OPTIONS), $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::ACTION_SCHEDULER_STORE) ), new V30104ArgsColumnLength( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_ACTION_ARGS_SCHEMA) ), new V40000WorkflowScheduledStepsSchema( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_WORKFLOW_SCHEDULED_STEPS_SCHEMA) ), new V040500OnScheduledStepsSchema( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_WORKFLOW_SCHEDULED_STEPS_SCHEMA) ), new V04905DebugLogRequestId( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_DEBUG_LOG_SCHEMA) ), new V04906DebugLogTimestampMilliseconds( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_DEBUG_LOG_SCHEMA) ), ]; $migrations = $container->get(ServicesAbstract::HOOKS)->applyFilters( HooksAbstract::FILTER_MIGRATIONS, $migrations ); return $migrations; }; }, ServicesAbstract::WPDB => static function (ContainerInterface $container) { global $wpdb; return $wpdb; }, ServicesAbstract::DB_TABLE_SCHEMA_HANDLER_FACTORY => static function (ContainerInterface $container) { return function () use ($container) { $handler = new DBTableSchemaHandler( $container->get(ServicesAbstract::WPDB) ); return $handler; }; }, ServicesAbstract::DB_TABLE_ACTION_ARGS_SCHEMA => static function (ContainerInterface $container) { $schemaHandler = $container->get(ServicesAbstract::DB_TABLE_SCHEMA_HANDLER_FACTORY); $schemaHandler = $schemaHandler(); return new ActionArgsSchema( $schemaHandler, $container->get(ServicesAbstract::HOOKS) ); }, ServicesAbstract::DB_TABLE_DEBUG_LOG_SCHEMA => static function (ContainerInterface $container) { $schemaHandler = $container->get(ServicesAbstract::DB_TABLE_SCHEMA_HANDLER_FACTORY); $schemaHandler = $schemaHandler(); return new DebugLogSchema( $schemaHandler, $container->get(ServicesAbstract::HOOKS) ); }, /** * @return ModuleInterface */ ServicesAbstract::MODULE_WORKFLOWS => static function (ContainerInterface $container) { return new ModuleWorkflows( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::WORKFLOWS_REST_API_MANAGER), $container->get(ServicesAbstract::STEP_TYPES_MODEL), $container->get(ServicesAbstract::CRON_SCHEDULES_MODEL), $container->get(ServicesAbstract::WORKFLOW_ENGINE), $container->get(ServicesAbstract::SETTINGS), $container->get(ServicesAbstract::DB_TABLE_WORKFLOW_SCHEDULED_STEPS_SCHEMA), $container->get(ServicesAbstract::MIGRATIONS_FACTORY), $container->get(ServicesAbstract::PLUGIN_VERSION), $container->get(ServicesAbstract::CRON), $container->get(ServicesAbstract::LOGGER), $container->get(ServicesAbstract::SANITIZATION), $container->get(ServicesAbstract::REQUEST), $container->get(ServicesAbstract::CURRENT_USER_MODEL_FACTORY), $container->get(ServicesAbstract::OPTIONS), $container->get(ServicesAbstract::EMAIL) ); }, ServicesAbstract::DB_TABLE_WORKFLOW_SCHEDULED_STEPS_SCHEMA => static function (ContainerInterface $container) { $schemaHandler = $container->get(ServicesAbstract::DB_TABLE_SCHEMA_HANDLER_FACTORY); $schemaHandler = $schemaHandler(); return new WorkflowScheduledStepsSchema( $schemaHandler, $container->get(ServicesAbstract::HOOKS) ); }, ServicesAbstract::DATABASE_SCHEMA_MAINTAINER => static function (ContainerInterface $container) { return new DatabaseSchemaMaintainer( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::DB_TABLE_ACTION_ARGS_SCHEMA), $container->get(ServicesAbstract::DB_TABLE_DEBUG_LOG_SCHEMA), $container->get(ServicesAbstract::DB_TABLE_WORKFLOW_SCHEDULED_STEPS_SCHEMA) ); }, ServicesAbstract::WORKFLOWS_REST_API_MANAGER => static function (ContainerInterface $container) { return new RestApiManager( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::WORKFLOW_SANITIZATION_UTIL) ); }, ServicesAbstract::STEP_TYPES_MODEL => static function (ContainerInterface $container) { return new StepTypesModel( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::SETTINGS) ); }, ServicesAbstract::CRON_SCHEDULES_MODEL => static function (ContainerInterface $container) { return new CronSchedulesModel(); }, ServicesAbstract::EXECUTION_CONTEXT_REGISTRY => static function (ContainerInterface $container) { return new ExecutionContextRegistry( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::EXECUTION_CONTEXT_PROCESSOR_REGISTRY), $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::LOGGER) ); }, ServicesAbstract::EXECUTION_CONTEXT_PROCESSOR_REGISTRY => static function (ContainerInterface $container) { return new ExecutionContextProcessorRegistry(); }, ServicesAbstract::EXECUTION_CONTEXT_PROCESSOR_INITIALIZER => static function (ContainerInterface $container) { return new ExecutionContextProcessorInitializer( $container->get(ServicesAbstract::EXECUTION_CONTEXT_PROCESSOR_REGISTRY), [ $container->get(ServicesAbstract::EXECUTION_CONTEXT_DATE_PROCESSOR) ] ); }, ServicesAbstract::EXECUTION_CONTEXT_DATE_PROCESSOR => static function (ContainerInterface $container) { return new DateProcessor( $container->get(ServicesAbstract::DATE_TIME_HANDLER) ); }, ServicesAbstract::WORKFLOW_ENGINE => static function (ContainerInterface $container): WorkflowEngineInterface { return new WorkflowEngine( $container->get(ServicesAbstract::HOOKS), $container->get(ServicesAbstract::STEP_TYPES_MODEL), $container->get(ServicesAbstract::STEP_RUNNER_FACTORY), $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY), $container->get(ServicesAbstract::LOGGER), $container->get(ServicesAbstract::EXECUTION_CONTEXT_PROCESSOR_INITIALIZER) ); }, ServicesAbstract::GENERAL_STEP_PROCESSOR_FACTORY => static function (ContainerInterface $container): \Closure { return static function (string $workflowExecutionId) use ($container): StepProcessorInterface { $executionContext = $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY) ->getExecutionContext($workflowExecutionId); return new GeneralStep( $container->get(ServicesAbstract::HOOKS), $executionContext, $container->get(ServicesAbstract::LOGGER) ); }; }, ServicesAbstract::POST_STEP_PROCESSOR_FACTORY => static function (ContainerInterface $container): \Closure { return static function ( StepProcessorInterface $generalProcessor, string $workflowExecutionId ) use ($container): StepProcessorInterface { $executionContext = $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY) ->getExecutionContext($workflowExecutionId); return new PostStep( $container->get(ServicesAbstract::HOOKS), $generalProcessor, $container->get(ServicesAbstract::LOGGER), $executionContext ); }; }, ServicesAbstract::CRON_STEP_PROCESSOR_FACTORY => static function (ContainerInterface $container): \Closure { return static function ( StepProcessorInterface $generalProcessor, string $workflowExecutionId ) use ($container): AsyncStepProcessorInterface { $executionContext = $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY) ->getExecutionContext($workflowExecutionId); return new CronStep( $container->get(ServicesAbstract::HOOKS), $generalProcessor, $container->get(ServicesAbstract::CRON), $container->get(ServicesAbstract::CRON_SCHEDULES_MODEL), $container->get(ServicesAbstract::PLUGIN_VERSION), $container->get(ServicesAbstract::LOGGER), $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $executionContext ); }; }, ServicesAbstract::WORKFLOW_LOGGER_FACTORY => static function (ContainerInterface $container) { return function (ExecutionContextInterface $executionContext) use ($container) { return new WorkflowLogger( $container->get(ServicesAbstract::LOGGER), $executionContext ); }; }, ServicesAbstract::STEP_RUNNER_FACTORY => static function (ContainerInterface $container) { return function ($nodeName, $workflowExecutionId) use ($container) { $hooks = $container->get(ServicesAbstract::HOOKS); $executionContext = $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY) ->getExecutionContext($workflowExecutionId); $stepRunner = $hooks->applyFilters( WorkflowsHooksAbstract::FILTER_WORKFLOW_ENGINE_MAP_STEP_RUNNER, null, $nodeName, $workflowExecutionId ); if (is_object($stepRunner)) { return $stepRunner; } $workflowLogger = call_user_func( $container->get(ServicesAbstract::WORKFLOW_LOGGER_FACTORY), $executionContext ); $settingsModel = $container->get(ServicesAbstract::SETTINGS); $generalStepProcessor = call_user_func( $container->get(ServicesAbstract::GENERAL_STEP_PROCESSOR_FACTORY), $workflowExecutionId ); switch ($nodeName) { // Triggers case OnInitRunner::getNodeTypeName(): if ($settingsModel->getExperimentalFeaturesStatus()) { $stepRunner = new OnInitRunner( $generalStepProcessor, $workflowLogger, $container->get(ServicesAbstract::WORKFLOW_ENGINE) ); } break; case OnAdminInitRunner::getNodeTypeName(): if ($settingsModel->getExperimentalFeaturesStatus()) { $stepRunner = new OnAdminInitRunner( $generalStepProcessor, $workflowLogger ); } break; case OnPostSaveRunner::getNodeTypeName(): $inputValidatorPostQuery = call_user_func( $container->get(ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY), $workflowExecutionId ); $stepRunner = new OnPostSaveRunner( $container->get(ServicesAbstract::HOOKS), $generalStepProcessor, $inputValidatorPostQuery, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD), $executionContext ); break; case OnPostUpdateRunner::getNodeTypeName(): $inputValidatorPostQuery = call_user_func( $container->get(ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY), $workflowExecutionId ); $stepRunner = new OnPostUpdateRunner( $container->get(ServicesAbstract::HOOKS), $generalStepProcessor, $inputValidatorPostQuery, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::POST_CACHE), $container->get(ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD), $executionContext ); break; case OnPostPublishRunner::getNodeTypeName(): $inputValidatorPostQuery = call_user_func( $container->get(ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY), $workflowExecutionId ); $stepRunner = new OnPostPublishRunner( $hooks, $generalStepProcessor, $inputValidatorPostQuery, $executionContext, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::POST_CACHE), $container->get(ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD) ); break; case OnPostCreateRunner::getNodeTypeName(): $stepRunner = new OnPostCreateRunner( $generalStepProcessor, $workflowLogger ); break; case OnPostStatusChangeRunner::getNodeTypeName(): $stepRunner = new OnPostStatusChangeRunner( $generalStepProcessor, $workflowLogger ); break; case OnPostScheduleRunner::getNodeTypeName(): $stepRunner = new OnPostScheduleRunner( $generalStepProcessor, $workflowLogger ); break; case OnTermsAddedRunner::getNodeTypeName(): $inputValidatorPostQuery = call_user_func( $container->get(ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY), $workflowExecutionId ); $stepRunner = new OnTermsAddedRunner( $container->get(ServicesAbstract::HOOKS), $generalStepProcessor, $inputValidatorPostQuery, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::POST_CACHE), $container->get(ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD), $executionContext ); break; case OnPostWorkflowEnableRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $inputValidatorPostQuery = call_user_func( $container->get(ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY), $workflowExecutionId ); $stepRunner = new OnPostWorkflowEnableRunner( $container->get(ServicesAbstract::HOOKS), $postStepProcessor, $inputValidatorPostQuery, $executionContext, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD) ); break; case OnLegacyActionTriggerRunner::getNodeTypeName(): $stepRunner = new OnLegacyActionTriggerRunner( $container->get(ServicesAbstract::HOOKS), $generalStepProcessor, $executionContext, $workflowLogger, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY) ); break; case OnScheduleRunner::getNodeTypeName(): $stepRunner = new OnScheduleRunner( $generalStepProcessor, $workflowLogger ); break; case OnPostMetaChangeRunner::getNodeTypeName(): $stepRunner = new OnPostMetaChangeRunner( $generalStepProcessor, $workflowLogger ); break; case OnPostAuthorChangeRunner::getNodeTypeName(): $stepRunner = new OnPostAuthorChangeRunner( $generalStepProcessor, $workflowLogger ); break; case OnPostRowActionRunner::getNodeTypeName(): $stepRunner = new OnPostRowActionRunner( $generalStepProcessor, $workflowLogger ); break; case OnUserRoleChangeRunner::getNodeTypeName(): $stepRunner = new OnUserRoleChangeRunner( $generalStepProcessor, $workflowLogger ); break; case OnCustomActionRunner::getNodeTypeName(): $stepRunner = new OnCustomActionRunner( $generalStepProcessor, $workflowLogger ); break; // Actions case DeletePostRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new DeletePostRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $workflowLogger ); break; case StickPostRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new StickPostRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $workflowLogger ); break; case UnstickPostRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new UnstickPostRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $workflowLogger ); break; case AddPostTermRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new AddPostTermRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::ERROR), $workflowLogger ); break; case SetPostTermRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new SetPostTermRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::ERROR), $workflowLogger ); break; case RemovePostTermRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new RemovePostTermRunner( $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $container->get(ServicesAbstract::ERROR), $workflowLogger ); break; case ChangePostStatusRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new ChangePostStatusRunner( $hooks, $postStepProcessor, $container->get(ServicesAbstract::EXPIRABLE_POST_MODEL_FACTORY), $workflowLogger ); break; case SendEmailRunner::getNodeTypeName(): $stepRunner = new SendEmailRunner( $generalStepProcessor, $container->get(ServicesAbstract::EMAIL), $executionContext, $workflowLogger ); break; case DeactivatePostWorkflowRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new DeactivatePostWorkflowRunner( $postStepProcessor, $executionContext, $workflowLogger ); break; case AddPostMetaRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new AddPostMetaRunner( $postStepProcessor, $workflowLogger ); break; case DeletePostMetaRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new DeletePostMetaRunner( $postStepProcessor, $workflowLogger ); break; case UpdatePostMetaRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new UpdatePostMetaRunner( $postStepProcessor, $workflowLogger ); break; case UpdatePostRunner::getNodeTypeName(): $postStepProcessor = call_user_func( $container->get(ServicesAbstract::POST_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new UpdatePostRunner( $postStepProcessor, $workflowLogger ); break; // Advanced case ScheduleDelayRunner::getNodeTypeName(): $cronStepProcessor = call_user_func( $container->get(ServicesAbstract::CRON_STEP_PROCESSOR_FACTORY), $generalStepProcessor, $workflowExecutionId ); $stepRunner = new ScheduleDelayRunner( $cronStepProcessor, $executionContext ); break; case ConditionalRunner::getNodeTypeName(): $stepRunner = new ConditionalRunner( $generalStepProcessor, $executionContext, $workflowLogger ); break; case QueryPostsRunner::getNodeTypeName(): $stepRunner = new QueryPostsRunner( $generalStepProcessor, $workflowLogger ); break; case SendRayRunner::getNodeTypeName(): $stepRunner = new SendRayRunner( $generalStepProcessor, $executionContext, $workflowLogger ); break; case AppendDebugLogRunner::getNodeTypeName(): $stepRunner = new AppendDebugLogRunner( $generalStepProcessor, $executionContext, $workflowLogger ); break; case DoActionRunner::getNodeTypeName(): $stepRunner = new DoActionRunner( $generalStepProcessor, $workflowLogger ); break; case UserInteractionRunner::getNodeTypeName(): $stepRunner = new UserInteractionRunner( $generalStepProcessor, $workflowLogger ); break; } return $hooks->applyFilters( WorkflowsHooksAbstract::FILTER_WORKFLOW_ENGINE_MAP_TRIGGER, $stepRunner, $nodeName, $executionContext ); }; }, ServicesAbstract::INPUT_VALIDATOR_POST_QUERY_FACTORY => static function (ContainerInterface $container) { return static function ($workflowExecutionId) use ($container) { $executionContext = $container->get(ServicesAbstract::EXECUTION_CONTEXT_REGISTRY) ->getExecutionContext($workflowExecutionId); $jsonLogicEngine = call_user_func( $container->get(ServicesAbstract::JSON_LOGIC_ENGINE_FACTORY), $executionContext ); return new PostQueryValidator( $executionContext, $jsonLogicEngine, $container->get(ServicesAbstract::LOGGER) ); }; }, ServicesAbstract::DATE_TIME_HANDLER => static function (ContainerInterface $container) { return new DateTimeHandler(); }, ServicesAbstract::CACHE_POSTS_WITH_FUTURE_ACTION => static function (ContainerInterface $container) { return new GenericCacheHandler(); }, ServicesAbstract::JSON_LOGIC_ENGINE_FACTORY => static function (ContainerInterface $container) { return static function ($executionContext) use ($container) { return new JsonLogicEngine( $executionContext ); }; }, ServicesAbstract::POST_CACHE => static function (ContainerInterface $container) { return new PostCache( $container->get(ServicesAbstract::HOOKS) ); }, ServicesAbstract::WORKFLOW_EXECUTION_SAFEGUARD => static function (ContainerInterface $container) { global $workflowExecutionSafeguard; if (! isset($workflowExecutionSafeguard)) { $workflowExecutionSafeguard = new WorkflowExecutionSafeguard( $container->get(ServicesAbstract::HOOKS) ); } return $workflowExecutionSafeguard; }, ServicesAbstract::WORKFLOW_SANITIZATION_UTIL => static function (ContainerInterface $container) { return new Utils\WorkflowSanitizationUtil(); }, ];