| 1 |  |  | <?php | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | namespace N1215\Jugoya; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | use Interop\Http\ServerMiddleware\DelegateInterface; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | use Interop\Http\ServerMiddleware\MiddlewareInterface; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | use N1215\Jugoya\Resolver\DelegateResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  | use N1215\Jugoya\Resolver\DelegateResolverInterface; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | use N1215\Jugoya\Resolver\MiddlewareResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | use N1215\Jugoya\Resolver\MiddlewareResolverInterface; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  | use Psr\Container\ContainerInterface; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | class Jugoya | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  |      * @var DelegateResolverInterface | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  |     private $delegateResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  |      * @var MiddlewareResolverInterface | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  |     private $middlewareResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  |      * @param DelegateResolverInterface $delegateResolver | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  |      * @param MiddlewareResolverInterface $middlewareResolver | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 | 4 |  |     public function __construct( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  |         DelegateResolverInterface $delegateResolver, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  |         MiddlewareResolverInterface $middlewareResolver | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |     ) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 | 4 |  |         $this->delegateResolver = $delegateResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 | 4 |  |         $this->middlewareResolver = $middlewareResolver; | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 | 4 |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  |      * @param ContainerInterface $container | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  |      * @return static | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  |      */ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 | 4 |  |     public static function fromContainer(ContainerInterface $container) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  |     { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 | 4 |  |         return new static(new DelegateResolver($container), new MiddlewareResolver($container)); | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  |     } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |     /** | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  |      * @param DelegateInterface|callable|string $coreDelegateEntry | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  |      * @param MiddlewareInterface[]|callable[]|string[] $middlewareEntries | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  |      * @return HttpApplication | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 51 |  |  |      */ | 
            
                                                        
            
                                    
            
            
                | 52 | 3 |  |     public function build($coreDelegateEntry, array $middlewareEntries) | 
            
                                                        
            
                                    
            
            
                | 53 |  |  |     { | 
            
                                                        
            
                                    
            
            
                | 54 | 3 |  |         $coreDelegate = $this->delegateResolver->resolve($coreDelegateEntry); | 
            
                                                        
            
                                    
            
            
                | 55 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 56 |  |  |         /** | 
            
                                                        
            
                                    
            
            
                | 57 |  |  |          * @var MiddlewareInterface[] $middlewareQueue | 
            
                                                        
            
                                    
            
            
                | 58 |  |  |          */ | 
            
                                                        
            
                                    
            
            
                | 59 | 3 |  |         $middlewareQueue = array_map(function($entry) { | 
            
                                                        
            
                                    
            
            
                | 60 | 3 |  |             return $this->middlewareResolver->resolve($entry); | 
            
                                                        
            
                                    
            
            
                | 61 | 3 |  |         }, $middlewareEntries); | 
            
                                                        
            
                                    
            
            
                | 62 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 63 | 3 |  |         return new HttpApplication($coreDelegate, new MiddlewarePipeline($middlewareQueue)); | 
            
                                                        
            
                                    
            
            
                | 64 |  |  |     } | 
            
                                                        
            
                                    
            
            
                | 65 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 66 |  |  |  |