Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Typescript Transformer Laravel Package

spatie/laravel-typescript-transformer

Generate TypeScript types from your Laravel/PHP code. Convert classes, DTOs and enums (with attributes) into accurate TS definitions, supporting nullable fields, complex/generic types, and even TypeScript function generation via a simple CLI/workflow.

View on GitHub
Deep Wiki
Context7
3.2.0

Narrow the controller method type and prioritize HTTP methods (#83)

Fixes #76. The generated RouteDefinition and MethodRoute types previously declared method: string, which forced casts when handing the result to libraries like Inertia that expect 'get' | 'post' | 'put' | 'patch' | 'delete'. The output now uses a literal union, so:

router.visit(SomeController.update(), { data: { ... } });

just works. On top of that, LaravelControllerTransformedProvider accepts a new httpMethodsPriority argument that doubles as both filter and sort order. Methods absent from the list are dropped from the output, and the ones that survive are emitted in list order. The default is ['get', 'post', 'put', 'patch', 'delete'], so HEAD and OPTIONS (auto-registered by Laravel for every GET route, never invoked by SPAs) are no longer emitted.

If you actually relied on the HEAD entries, pass a custom list including 'head'. Thanks @rubenvanassche.

3.1.0

A round of bug fixes for route generation, laravel-data integration, and the writer.

Honor laravel-data name_mapping_strategy.output config (#81)

If your config/data.php looked like this:

'name_mapping_strategy' => [
    'output' => SnakeCaseMapper::class,
],


The transformer was silently ignoring it and emitting camelCase keys. The processor now resolves property output names through DataConfig::getDataClass(), so the global mapper, class level, and property level MapName / MapOutputName attributes all flow through one source. Thanks @rubenvanassche.

Fix route() helper producing // for the root route (#82)

Route::get('/') produced route('home') === '//' because Laravel's $route->uri returns / for the root and bare paths (without a leading slash) for everything else. The runtime helper then prepended another /. After this fix:

route('home');         // '/'  (was '//')
route('help.index');   // '/help' (unchanged)


Thanks @rubenvanassche.

Fix null byte crash in the route watcher when using filters (#80)

Watching routes with any RouteFilter configured crashed with Command array element 4 contains a null byte. PHP's serialize() emits \0*\0 markers for protected properties, and Symfony Process rejects command arguments that contain null bytes. Every shipped filter (NamedRouteFilter, ControllerRouteFilter, ClosureRouteFilter) hit this. The serialized payload is now base64 encoded across the process boundary. Thanks @rubenvanassche.

Support custom data collections in controller types (#73)

Controller type generation now uses is_a() instead of in_array() when checking for data collection classes, so subclasses of DataCollection are recognised. buildActionCallExpression was also renamed to buildActionCallNode to make it overridable. Thanks @iamrgroot.

Fix GlobalNamespaceWriter producing a broken path when given an absolute path (#79)

Passing an absolute path resulted in the output directory being concatenated in front of it:

resources/js/generated/home/user/project/resources/types/generated.d.ts


Pass a relative filename instead, and the writer will resolve it correctly against the configured output directory. Thanks @A909M.

What's Changed

Full Changelog: https://github.com/spatie/laravel-typescript-transformer/compare/3.0.3...3.0.4

3.0.3

What's Changed

Full Changelog: https://github.com/spatie/laravel-typescript-transformer/compare/3.0.2...3.0.3

3.0.2

What's fixed

  • Fixed incorrect namespace and non-existent class in typescript:install command stub (#69)
    • Spatie\TypeScriptTransformer\Laravel\TypeScriptTransformerApplicationServiceProviderSpatie\LaravelTypeScriptTransformer\TypeScriptTransformerApplicationServiceProvider
    • NamespaceWriterGlobalNamespaceWriter
3.0.1

What's Changed

  • Fix generic arity mismatch in paginator interface type aliases
  • Inject Runner via handle() method for testability
  • Add tests for TransformTypeScriptCommand
  • Update publishable service provider stub path
3.0.0

This is a major release built on top of the completely rewritten spatie/typescript-transformer v3.

What's New

  • Everything new in spatie/typescript-transformer v3
  • Service provider configuration - Configure the package in a service provider instead of a config file
  • Controller type generation - Automatically generate TypeScript types for your Laravel controller actions, including request parameters and response types
  • Route type generation - Generate a typed route helper with full autocompletion for route names and parameters
  • Watch mode - File watcher that automatically regenerates TypeScript types as you develop

Breaking Changes

  • Requires PHP 8.2+ and Laravel 10+
  • Configuration moved from config file to service provider
  • Depends on spatie/typescript-transformer ^3.0

Since it is a complete rewrite, we recommend reading through the new docs and updating your application accodingly.

2.6.0
  • Added support for Laravel 13
  • Dropped support for Laravel 8 and 9
2.5.2

What's Changed

Full Changelog: https://github.com/spatie/laravel-typescript-transformer/compare/2.5.1...2.5.2

2.3.2
  • Use Laravel typescript transformer by default (#34)
  • Replace CarbonInterface with a string (#33)
2.3.1
  • Replace CarbonInterface with a string (#33)
2.3.0
  • Drop support for PHP 8.0
  • Enable collecting of enums by default
2.2.0
  • Add a native enum transformer by default
2.1.6
  • composer bump for typescript-transformer
  • add test suite for php 8.2
2.1.5
  • do not fail when spatie/enum is not installed
2.1.4
  • use package service provider to fix publishing config
2.1.3
2.1.2
2.1.1
  • add support for transforming to native TypeScript enums
2.1.0
  • add support for PHP 8.1
  • drop support for Laravel 7
  • fix issue with union types and Laravel collection transformer
2.0.0
  • The package is now PHP 8 only
  • Added TypeReflectors to reflect method return types, method parameters & class properties within your transformers
  • Added support for attributes
  • Added support for manually adding TypeScript to a class or property
  • Added formatters like Prettier which can format TypeScript code
  • Added support for inlining types directly
  • Updated the DtoTransformer to be a lot more flexible for your own projects
  • Added support for PHP 8 union types
1.1.2
  • Add support for configuring the writers (#7)
1.1.1
  • Add support for PHP 8
1.1.0
  • Moved SpatieEnumTransformer to the typescript-transformer package
1.0.1
  • Add support for Laravel 8
1.0.0
  • Initial release
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium
sandermuller/package-boost-laravel
sandermuller/boost-skills
redaxo/core
yusufgenc/filament-api-forge
l3aro/rating-star-for-filament
leek/filament-subtenant-scope
anil/file-picker
broqit/fields-ai