diff --git a/src/CommandRouteGenerator.php b/src/CommandRouteGenerator.php index f7c379ec..e921e369 100644 --- a/src/CommandRouteGenerator.php +++ b/src/CommandRouteGenerator.php @@ -12,7 +12,7 @@ class CommandRouteGenerator extends Command { protected $signature = 'ziggy:generate {path? : Path to the generated JavaScript file. Default: `resources/js/ziggy.js`.} - {--types : Generate a TypeScript declaration file.} + {--types=false : Generate a TypeScript declaration file at the given path. Default: `resources/js/ziggy.d.ts`.} {--types-only : Generate only a TypeScript declaration file.} {--url=} {--group=} @@ -47,10 +47,15 @@ public function handle(Filesystem $filesystem) $filesystem->put(base_path("{$name}.js"), new $output($ziggy)); } - if ($this->option('types') || $this->option('types-only')) { + if ($this->option('types') !== 'false' || $this->option('types-only')) { $types = config('ziggy.output.types', Types::class); - $filesystem->put(base_path("{$name}.d.ts"), new $types($ziggy)); + $typesPath = match ($this->option('types')) { + 'false', null => config('ziggy.output.types-path', "{$name}.d.ts"), + default => $this->option('types'), + }; + + $filesystem->put(base_path($typesPath), new $types($ziggy)); } $this->info('Files generated!'); diff --git a/tests/Unit/CommandRouteGeneratorTest.php b/tests/Unit/CommandRouteGeneratorTest.php index 9143b269..302ccda6 100644 --- a/tests/Unit/CommandRouteGeneratorTest.php +++ b/tests/Unit/CommandRouteGeneratorTest.php @@ -157,6 +157,21 @@ expect(base_path('resources/js/ziggy.d.ts'))->toEqualFile('./tests/fixtures/ziggy.d.ts'); }); +test('generate dts file at custom path', function () { + artisan('ziggy:generate --types=resources/js/custom.d.ts'); + + expect(base_path('resources/js/custom.d.ts'))->toBeFile(); +}); + +test('generate dts file at path set in config', function () { + config(['ziggy.output.types-path' => 'resources/js/types.d.ts']); + + artisan('ziggy:generate --types'); + + expect(base_path('resources/js/ziggy.js'))->toBeFile(); + expect(base_path('resources/js/types.d.ts'))->toBeFile(); +}); + test('generate dts file without generating routes file', function () { artisan('ziggy:generate --types-only'); @@ -184,6 +199,7 @@ expect(array_map(base_path(...), $files))->each->toBeFile(); })->with([ ['resources/js/x.js --types', ['resources/js/x.js', 'resources/js/x.d.ts']], + ['resources/js/x.js --types=resources/js/t.d.ts', ['resources/js/x.js', 'resources/js/t.d.ts']], ['resources/js/y.ts --types', ['resources/js/y.js', 'resources/js/y.d.ts']], ['resources/js/z.d.ts --types', ['resources/js/z.js', 'resources/js/z.d.ts']], ['resources/scripts/foo --types', ['resources/scripts/foo.js', 'resources/scripts/foo.d.ts']],