static fn (): Environment => Environment::from($_ENV['ENVIRONMENT']), ServerRequest::class => static fn (): ServerRequest => ServerRequestFactory::fromGlobals($_SERVER, $_GET, $_POST, $_COOKIE, $_FILES), Engine::class => static fn (): Engine => new Engine(dirname(__DIR__).'/resources/views'), EnvironmentLoader::class => static fn () => new EnvironmentLoader(dirname(__DIR__)), 'middlewares' => static fn () => [ StartSessionMiddleware::class, CspMiddleware::class, HstsMiddleware::class, ], Router::class => static function (ContainerInterface $container): Router { $strategy = new ApplicationStrategy(); $strategy->setContainer($container); $router = new Router(); $router->setStrategy($strategy); $router->lazyMiddlewares($container->get('middlewares')); Routes::routes($router); return $router; }, CspPolicy::class => static fn (ContainerInterface $container): CspPolicy => (new CspPolicy()) ->addDirective($container->get(DefaultSrc::class)) ->addDirective($container->get(ImgSrc::class)) ->addDirective($container->get(ScriptSrc::class)) ->addDirective($container->get(StyleSrc::class)), DefaultSrc::class => static fn (): DefaultSrc => (new DefaultSrc())->addSource("'self'"), ImgSrc::class => static fn (): ImgSrc => (new ImgSrc())->addSource("'self'"), ScriptSrc::class => static fn (): ScriptSrc => (new ScriptSrc())->addSource("'self'"), StyleSrc::class => static fn (): StyleSrc => (new StyleSrc())->addSource("'self'"), HstConfig::class => static fn (): HstConfig => new HstConfig( maxAge: 31536000, includeSubdomains: true, preload: true ), ];