|
4 | 4 |
|
5 | 5 | namespace Butschster\ContextGenerator;
|
6 | 6 |
|
7 |
| -use Butschster\ContextGenerator\ConfigLoader\Parser\ParserPluginRegistry; |
8 |
| -use Butschster\ContextGenerator\Console\DisplayCommand; |
9 |
| -use Butschster\ContextGenerator\Console\GenerateCommand; |
10 |
| -use Butschster\ContextGenerator\Console\InitCommand; |
11 |
| -use Butschster\ContextGenerator\Console\MCPServerCommand; |
12 |
| -use Butschster\ContextGenerator\Console\SchemaCommand; |
13 |
| -use Butschster\ContextGenerator\Console\SelfUpdateCommand; |
14 |
| -use Butschster\ContextGenerator\Console\VersionCommand; |
15 |
| -use Butschster\ContextGenerator\Lib\Content\ContentBuilderFactory; |
16 |
| -use Butschster\ContextGenerator\Lib\Content\Renderer\MarkdownRenderer; |
17 |
| -use Butschster\ContextGenerator\Lib\Content\Renderer\RendererInterface; |
18 |
| -use Butschster\ContextGenerator\Lib\Files; |
19 |
| -use Butschster\ContextGenerator\Lib\GithubClient\GithubClientInterface; |
20 |
| -use Butschster\ContextGenerator\Lib\HttpClient\HttpClientFactory; |
21 |
| -use Butschster\ContextGenerator\Lib\HttpClient\HttpClientInterface; |
22 |
| -use Butschster\ContextGenerator\Lib\Logger\ConsoleLogger; |
23 |
| -use Butschster\ContextGenerator\Lib\Logger\LoggerFactory; |
24 |
| -use Butschster\ContextGenerator\McpServer\Registry\McpItemsRegistry; |
25 |
| -use Butschster\ContextGenerator\McpServer\Routing\McpResponseStrategy; |
26 |
| -use Butschster\ContextGenerator\McpServer\Routing\RouteRegistrar; |
27 |
| -use Butschster\ContextGenerator\Modifier\SourceModifierRegistry; |
28 |
| -use GuzzleHttp\Client; |
29 |
| -use GuzzleHttp\Psr7\HttpFactory; |
30 |
| -use League\Route\Router; |
31 |
| -use League\Route\Strategy\StrategyInterface; |
32 |
| -use Monolog\ErrorHandler; |
33 |
| -use Psr\Container\ContainerInterface; |
| 7 | +use Butschster\ContextGenerator\Application\Application; |
| 8 | +use Butschster\ContextGenerator\Application\ExceptionHandler; |
| 9 | +use Butschster\ContextGenerator\Application\Kernel; |
34 | 10 | use Spiral\Core\Container;
|
35 |
| -use Symfony\Component\Console\Application; |
36 |
| -use Symfony\Component\Console\Input\ArgvInput; |
37 |
| -use Symfony\Component\Console\Output\ConsoleOutput; |
38 |
| -use Symfony\Component\Console\Style\SymfonyStyle; |
| 11 | +use Spiral\Core\Options; |
39 | 12 |
|
40 | 13 | // -----------------------------------------------------------------------------
|
41 | 14 | // Prepare Global Environment
|
42 | 15 | // -----------------------------------------------------------------------------
|
43 |
| - |
44 |
| -\error_reporting(E_ERROR); |
| 16 | +\mb_internal_encoding('UTF-8'); |
| 17 | +\error_reporting((E_ALL | E_STRICT) ^ E_DEPRECATED); |
45 | 18 |
|
46 | 19 |
|
47 | 20 | // -----------------------------------------------------------------------------
|
|
55 | 28 | }
|
56 | 29 |
|
57 | 30 |
|
58 |
| -$insidePhar = \str_starts_with(__FILE__, 'phar://'); |
59 |
| - |
60 |
| - |
61 | 31 | // -----------------------------------------------------------------------------
|
62 | 32 | // Load Composer's Autoloader
|
63 | 33 | // -----------------------------------------------------------------------------
|
|
88 | 58 |
|
89 | 59 |
|
90 | 60 | // -----------------------------------------------------------------------------
|
91 |
| -// Execute An Application |
| 61 | +// Initialize Shared Container |
92 | 62 | // -----------------------------------------------------------------------------
|
93 | 63 |
|
94 |
| -$application = new Application(); |
95 |
| -$application->setDefaultCommand('generate'); |
96 |
| - |
97 |
| -$input = new ArgvInput(); |
98 |
| -$output = new SymfonyStyle($input, new ConsoleOutput()); |
99 |
| - |
100 |
| -$errorHandler = new ErrorHandler(new ConsoleLogger($output)); |
101 |
| -$errorHandler->registerExceptionHandler(); |
102 |
| -$errorHandler->registerErrorHandler(); |
103 |
| -$errorHandler->registerFatalHandler(); |
104 |
| - |
| 64 | +$insidePhar = \str_starts_with(__FILE__, 'phar://'); |
105 | 65 | $vendorPath = \dirname($vendorPath) . '/../';
|
106 | 66 | $versionFile = $vendorPath . '/version.json';
|
107 | 67 | $appPath = \realpath($vendorPath);
|
108 |
| - |
| 68 | +if ($insidePhar) { |
| 69 | + $appPath = \getcwd(); |
| 70 | +} |
109 | 71 | $version = \file_exists($versionFile)
|
110 | 72 | ? \json_decode(\file_get_contents($versionFile), true)
|
111 | 73 | : [
|
|
115 | 77 |
|
116 | 78 | $type = $version['type'] ?? 'phar';
|
117 | 79 |
|
118 |
| -if ($insidePhar) { |
119 |
| - $appPath = \getcwd(); |
120 |
| -} |
121 |
| - |
122 |
| -$container = new Container(); |
123 |
| -$container->bindSingleton( |
124 |
| - Directories::class, |
125 |
| - new Directories( |
126 |
| - rootPath: $appPath, |
127 |
| - outputPath: $appPath . '/.context', |
128 |
| - configPath: $appPath, |
129 |
| - jsonSchemaPath: __DIR__ . '/json-schema.json', |
130 |
| - ), |
131 |
| -); |
| 80 | +$options = new Options(); |
| 81 | +$options->checkScope = true; |
132 | 82 |
|
133 |
| -$container->bindSingleton(ParserPluginRegistry::class, static fn() => ParserPluginRegistry::createDefault()); |
134 |
| -$container->bindSingleton(ConfigurationProviderFactory::class, ConfigurationProviderFactory::class); |
135 |
| -$container->bindSingleton(FilesInterface::class, Files::class); |
136 |
| -$container->bindSingleton(StrategyInterface::class, McpResponseStrategy::class); |
| 83 | +$container = new Container(options: $options); |
137 | 84 | $container->bindSingleton(
|
138 |
| - SourceModifierRegistry::class, |
139 |
| - static fn(ModifierRegistryFactory $factory) => $factory->create(), |
140 |
| -); |
141 |
| -$container->bindSingleton( |
142 |
| - HttpClientInterface::class, |
143 |
| - static function (Client $httpClient, HttpFactory $httpMessageFactory) { |
144 |
| - return HttpClientFactory::create( |
145 |
| - $httpClient, |
146 |
| - $httpMessageFactory, |
147 |
| - ); |
148 |
| - }, |
149 |
| -); |
150 |
| -$container->bindSingleton(RendererInterface::class, MarkdownRenderer::class); |
151 |
| -$container->bindSingleton(ContentBuilderFactory::class, ContentBuilderFactory::class); |
152 |
| -$container->bindSingleton( |
153 |
| - GithubClientInterface::class, |
154 |
| - static fn(HttpClientInterface $httpClient) => new GithubClientFactory( |
155 |
| - httpClient: $httpClient, |
156 |
| - defaultToken: \getenv('GITHUB_TOKEN') ?: null, |
| 85 | + Application::class, |
| 86 | + new Application( |
| 87 | + version: $version['version'] ?? 'dev', |
| 88 | + name: 'Context Generator', |
| 89 | + isBinary: $type !== 'phar', |
157 | 90 | ),
|
158 | 91 | );
|
159 | 92 |
|
160 |
| -$container->bindSingleton(LoggerFactory::class, LoggerFactory::class); |
161 |
| -$container->bindSingleton(Router::class, static function (StrategyInterface $strategy, ContainerInterface $container) { |
162 |
| - $router = new Router(); |
163 |
| - $strategy->setContainer($container); |
164 |
| - $router->setStrategy($strategy); |
165 |
| - |
166 |
| - return $router; |
167 |
| -}); |
168 |
| -$container->bindSingleton(RouteRegistrar::class, RouteRegistrar::class); |
169 |
| -$container->bindSingleton(McpItemsRegistry::class, McpItemsRegistry::class); |
170 |
| - |
171 |
| -// Register all commands |
172 |
| -$application->add( |
173 |
| - $container->make(VersionCommand::class, [ |
174 |
| - 'version' => $version['version'] ?? 'dev', |
175 |
| - ]), |
176 |
| -); |
177 |
| - |
178 |
| -$application->add( |
179 |
| - $container->make(InitCommand::class), |
180 |
| -); |
181 |
| - |
182 |
| -$application->add( |
183 |
| - $container->make(SchemaCommand::class), |
184 |
| -); |
185 |
| - |
186 |
| -$application->add( |
187 |
| - $container->make(SelfUpdateCommand::class, [ |
188 |
| - 'version' => $version['version'] ?? 'dev', |
189 |
| - 'binaryType' => $type, |
190 |
| - ]), |
191 |
| -); |
192 |
| - |
193 |
| -$application->add( |
194 |
| - $container->make(GenerateCommand::class), |
195 |
| -); |
196 |
| - |
197 |
| -$application->add( |
198 |
| - $container->make(DisplayCommand::class), |
199 |
| -); |
| 93 | +// ----------------------------------------------------------------------------- |
| 94 | +// Execute Application |
| 95 | +// ----------------------------------------------------------------------------- |
200 | 96 |
|
201 |
| -$application->add( |
202 |
| - $container->make(MCPServerCommand::class), |
203 |
| -); |
| 97 | +$app = Kernel::create( |
| 98 | + directories: [ |
| 99 | + 'root' => $appPath, |
| 100 | + 'output' => $appPath . '/.context', |
| 101 | + 'config' => $appPath, |
| 102 | + 'json-schema' => __DIR__ . '/json-schema.json', |
| 103 | + ], |
| 104 | + exceptionHandler: ExceptionHandler::class, |
| 105 | + container: $container, |
| 106 | +)->run(); |
| 107 | + |
| 108 | +if ($app === null) { |
| 109 | + exit(255); |
| 110 | +} |
204 | 111 |
|
205 |
| -$application->run($input, $output); |
| 112 | +$code = (int) $app->serve(); |
| 113 | +exit($code); |
0 commit comments