<?php // phpcs:disable WordPress.NamingConventions.ValidVariableName /** * This is a vendored set of php-di/php-di helper functions. We place it directly in our library to improve experience when using DI along with code scoping, which defy composer's file autoloading. * * @see https://github.com/PHP-DI/PHP-DI/blob/master/src/functions.php */ declare(strict_types=1); namespace WPDesk\Init\DI; use DI\Definition\ArrayDefinitionExtension; use DI\Definition\EnvironmentVariableDefinition; use DI\Definition\Helper\AutowireDefinitionHelper; use DI\Definition\Helper\CreateDefinitionHelper; use DI\Definition\Helper\FactoryDefinitionHelper; use DI\Definition\Reference; use DI\Definition\StringDefinition; use DI\Definition\ValueDefinition; if ( ! function_exists( 'WPDesk\Init\DI\value' ) ) { /** * Helper for defining a value. */ function value( mixed $value ): ValueDefinition { return new ValueDefinition( $value ); } } if ( ! function_exists( 'WPDesk\Init\DI\create' ) ) { /** * Helper for defining an object. * * @param string|null $className Class name of the object. * If null, the name of the entry (in the container) will be used as class name. */ function create( ?string $className = null ): CreateDefinitionHelper { return new CreateDefinitionHelper( $className ); } } if ( ! function_exists( 'WPDesk\Init\DI\autowire' ) ) { /** * Helper for autowiring an object. * * @param string|null $className Class name of the object. * If null, the name of the entry (in the container) will be used as class name. */ function autowire( ?string $className = null ): AutowireDefinitionHelper { return new AutowireDefinitionHelper( $className ); } } if ( ! function_exists( 'WPDesk\Init\DI\factory' ) ) { /** * Helper for defining a container entry using a factory function/callable. * * @param callable|array|string $factory The factory is a callable that takes the container as parameter * and returns the value to register in the container. */ function factory( $factory ): FactoryDefinitionHelper { return new FactoryDefinitionHelper( $factory ); } } if ( ! function_exists( 'WPDesk\Init\DI\decorate' ) ) { /** * Decorate the previous definition using a callable. * * Example: * * 'foo' => decorate(function ($foo, $container) { * return new CachedFoo($foo, $container->get('cache')); * }) * * @param callable $callable The callable takes the decorated object as first parameter and * the container as second. */ function decorate( $callable ): FactoryDefinitionHelper { return new FactoryDefinitionHelper( $callable, true ); } } if ( ! function_exists( 'WPDesk\Init\DI\get' ) ) { /** * Helper for referencing another container entry in an object definition. */ function get( string $entryName ): Reference { return new Reference( $entryName ); } } if ( ! function_exists( 'WPDesk\Init\DI\env' ) ) { /** * Helper for referencing environment variables. * * @param string $variableName The name of the environment variable. * @param mixed $defaultValue The default value to be used if the environment variable is not defined. */ function env( string $variableName, mixed $defaultValue = null ): EnvironmentVariableDefinition { // Only mark as optional if the default value was *explicitly* provided. $isOptional = 2 === func_num_args(); return new EnvironmentVariableDefinition( $variableName, $isOptional, $defaultValue ); } } if ( ! function_exists( 'WPDesk\Init\DI\add' ) ) { /** * Helper for extending another definition. * * Example: * * 'log.backends' => DI\add(DI\get('My\Custom\LogBackend')) * * or: * * 'log.backends' => DI\add([ * DI\get('My\Custom\LogBackend') * ]) * * @param mixed|array $values A value or an array of values to add to the array. * * @since 5.0 */ function add( $values ): ArrayDefinitionExtension { if ( ! is_array( $values ) ) { $values = [ $values ]; } return new ArrayDefinitionExtension( $values ); } } if ( ! function_exists( 'WPDesk\Init\DI\string' ) ) { /** * Helper for concatenating strings. * * Example: * * 'log.filename' => DI\string('{app.path}/app.log') * * @param string $expression A string expression. Use the `{}` placeholders to reference other container entries. * * @since 5.0 */ function string( string $expression ): StringDefinition { return new StringDefinition( $expression ); } }