studly($name); $alias = $this->kebab($name); $root = rtrim(config('developer.modules_path', base_path('Modules')), '/').'/'.$name; $provider = "Modules\\{$name}\\Providers\\{$name}ServiceProvider"; $files = [ "$root/module.json" => json_encode([ 'name' => $name, 'alias' => $alias, 'version' => '1.0.0', 'description' => "{$name} module.", 'keywords' => [$alias], 'priority' => 100, 'providers' => [$provider], 'aliases' => (object) [], 'files' => [], 'requires' => ['Core', 'Administration'], ], JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES).PHP_EOL, "$root/Config/config.php" => " '{$name}'];\n", "$root/Providers/{$name}ServiceProvider.php" => $this->provider($name), "$root/Providers/RouteServiceProvider.php" => $this->routeProvider($name), "$root/Routes/web.php" => "prefix('administration/{$alias}')->name('administration.{$alias}.')->group(function (): void {\n // Register module routes here.\n});\n", "$root/Tests/Feature/{$name}ModuleBootTest.php" => $this->test($name), ]; foreach ($files as $path => $contents) { $this->write($path, $contents, $force); } return array_keys($files); } private function provider(string $name): string { return "app->register(RouteServiceProvider::class);\n \$this->mergeConfigFrom(module_path('{$name}', 'Config/config.php'), '".str($name)->snake()."');\n }\n\n public function boot(): void\n {\n \$this->loadMigrationsFrom(module_path('{$name}', 'Database/Migrations'));\n \$this->loadViewsFrom(module_path('{$name}', 'Resources/views'), '".str($name)->snake()."');\n }\n}\n"; } private function routeProvider(string $name): string { return "group(module_path('{$name}', 'Routes/web.php'));\n }\n}\n"; } private function test(string $name): string { return "providerIsLoaded(Modules\\{$name}\\Providers\\{$name}ServiceProvider::class))->toBeTrue();\n});\n"; } }