tighten / ziggy

Use your Laravel routes in JavaScript.
MIT License
3.86k stars 247 forks source link

First Class TypeScript support #654

Closed lmeysel closed 1 year ago

lmeysel commented 1 year ago

I pretty much appreciate your library but everytime I use it, I wonder if it would be possible to have it integrated into modern tooling. There are several issues regarding typescript support, but honestly, most of them are not very satisfying and the @types/zigg-js package also does not integrate well in my environments.

So I started an experiment which utilizes typescript's interface Augementation to "polyfill" the generated routes and migrated the whole JS code to TypeScript. For better integration I also introduced a modified version of the vite-plugin from https://github.com/tighten/ziggy/issues/321#issuecomment-1477322084.

As a result the new ziggy could come with out-of-the-box TS support and vite integration.

I hope you like it and you are interested in discussing this!

Highlights

Vite Integration

Use ziggy in vite and generate route-declarations everytime the route-files change:

import { defineConfig } from 'vite';
import Ziggy from 'ziggy-js/vite';

defineConfig({
  plugins: [
    Ziggy({ declarations: 'only' }),
  ]
});

TS Integration

// routes/web.php
Route::get('/users/{user}/posts/{post}/comments', [CommentsController::class, 'index'])->name('users.posts.comments');

Now VSCode will support you like this: image

... and, much better, like this: image image

lmeysel commented 1 year ago

Sorry, I guess I messed with a lot of peanut-commits.... I close this PR and open a new one with a clean history ;)