Skip to content

Commit ada585b

Browse files
Merge pull request #872 from tighten/dts-escape-hatch
Allow specifying the name of the typescript declaration file
2 parents 43bef1a + e1b56cc commit ada585b

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

src/CommandRouteGenerator.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class CommandRouteGenerator extends Command
1212
{
1313
protected $signature = 'ziggy:generate
1414
{path? : Path to the generated JavaScript file. Default: `resources/js/ziggy.js`.}
15-
{--types : Generate a TypeScript declaration file.}
15+
{--types=false : Generate a TypeScript declaration file at the given path. Default: `resources/js/ziggy.d.ts`.}
1616
{--types-only : Generate only a TypeScript declaration file.}
1717
{--url=}
1818
{--group=}
@@ -47,10 +47,15 @@ public function handle(Filesystem $filesystem)
4747
$filesystem->put(base_path("{$name}.js"), new $output($ziggy));
4848
}
4949

50-
if ($this->option('types') || $this->option('types-only')) {
50+
if ($this->option('types') !== 'false' || $this->option('types-only')) {
5151
$types = config('ziggy.output.types', Types::class);
5252

53-
$filesystem->put(base_path("{$name}.d.ts"), new $types($ziggy));
53+
$typesPath = match ($this->option('types')) {
54+
'false', null => config('ziggy.output.types-path', "{$name}.d.ts"),
55+
default => $this->option('types'),
56+
};
57+
58+
$filesystem->put(base_path($typesPath), new $types($ziggy));
5459
}
5560

5661
$this->info('Files generated!');

tests/Unit/CommandRouteGeneratorTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,21 @@
157157
expect(base_path('resources/js/ziggy.d.ts'))->toEqualFile('./tests/fixtures/ziggy.d.ts');
158158
});
159159

160+
test('generate dts file at custom path', function () {
161+
artisan('ziggy:generate --types=resources/js/custom.d.ts');
162+
163+
expect(base_path('resources/js/custom.d.ts'))->toBeFile();
164+
});
165+
166+
test('generate dts file at path set in config', function () {
167+
config(['ziggy.output.types-path' => 'resources/js/types.d.ts']);
168+
169+
artisan('ziggy:generate --types');
170+
171+
expect(base_path('resources/js/ziggy.js'))->toBeFile();
172+
expect(base_path('resources/js/types.d.ts'))->toBeFile();
173+
});
174+
160175
test('generate dts file without generating routes file', function () {
161176
artisan('ziggy:generate --types-only');
162177

@@ -184,6 +199,7 @@
184199
expect(array_map(base_path(...), $files))->each->toBeFile();
185200
})->with([
186201
['resources/js/x.js --types', ['resources/js/x.js', 'resources/js/x.d.ts']],
202+
['resources/js/x.js --types=resources/js/t.d.ts', ['resources/js/x.js', 'resources/js/t.d.ts']],
187203
['resources/js/y.ts --types', ['resources/js/y.js', 'resources/js/y.d.ts']],
188204
['resources/js/z.d.ts --types', ['resources/js/z.js', 'resources/js/z.d.ts']],
189205
['resources/scripts/foo --types', ['resources/scripts/foo.js', 'resources/scripts/foo.d.ts']],

0 commit comments

Comments
 (0)