critical('Uncaught exception: '.$t->getMessage(), ['exception' => $t]); exit(1); }); /** * @return TransportInterface|TransportInterface */ function transport(): TransportInterface { if ('cli' === \PHP_SAPI) { return new StdioTransport(logger: logger()); } return new StreamableHttpTransport( (new Psr17Factory())->createServerRequestFromGlobals(), logger: logger(), ); } function shutdown(ResponseInterface|int $result): never { if ('cli' === \PHP_SAPI) { exit($result); } (new SapiEmitter())->emit($result); exit(0); } function logger(): LoggerInterface { return new class extends AbstractLogger { public function log($level, Stringable|string $message, array $context = []): void { $debug = $_SERVER['DEBUG'] ?? false; if (!$debug && 'debug' === $level) { return; } $logMessage = sprintf( "[%s] %s %s\n", strtoupper($level), $message, ([] === $context || !$debug) ? '' : json_encode($context), ); if (($_SERVER['FILE_LOG'] ?? false) || !defined('STDERR')) { file_put_contents('dev.log', $logMessage, \FILE_APPEND); } else { fwrite(\STDERR, $logMessage); } } }; } function container(): Container { $container = new Container(); $container->set(LoggerInterface::class, logger()); return $container; }