PHP code example of splitstack / laravel-typewriter
1. Go to this page and download the library: Download splitstack/laravel-typewriter library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
splitstack / laravel-typewriter example snippets
use Splitstack\Typewriter\DataPacket;
return inertia('Orders/Index', [
'orders' => DataPacket::from([
'data' => $orders->toArray(),
'meta' => ['total' => $orders->total()],
'source' => 'orders',
]),
]);
// app/Domain/Data/OrderData.php
#[TypeScript]
class OrderData extends Data
{
public function __construct(
public readonly int $id,
public readonly string $status,
public readonly float $total,
) {}
}
// app/Domain/Packets/OrderPacket.php
class OrderPacket extends DataPacket
{
public function __construct(
public readonly OrderData $data,
array $meta = [],
array $defaults = [],
mixed $default = null,
string|int|null $source = null,
string|int|null $target = null,
) {
parent::__construct($data->toArray(), $meta, $defaults, $default, $source, $target);
}
}
return inertia('Orders/Show', [
'order' => OrderPacket::from([
'data' => OrderData::from($order),
'defaults'=> ['status' => 'pending'],
'source' => OrderSource::Api->value,
'target' => OrderTarget::Checkout->value,
]),
]);
'sources' => [
'value_objects' => [
'directories' => ['Domain/ValueObjects'],
],
'dtos' => [
'directories' => ['Domain/DTOs', 'Http/Resources'],
],
'packets' => [
'directories' => ['Domain/Packets', 'Http/Packets'],
'enums' => ['Domain/Enums'], // BackedEnums used as source/target
'enabled' => true,
],
],
use Spatie\TypeScriptTransformer\Attributes\TypeScript;
#[TypeScript]
class OrderData extends Data { ... }
enum OrderSource: string
{
case Api = 'api';
case Admin = 'admin';
}
// config/typewriter.php
return [
'sources' => [
'value_objects' => [
'directories' => ['Domain/ValueObjects'],
'packets' => [
'directories' => ['Domain/Packets', 'Http/Packets'],
'enums' => ['Domain/Enums'],
'enabled' => false, // opt-in; enable once you have packets
],
],
'output' => [
'value_objects' => null, // resource_path('js/types/value-objects.ts')
'dtos' => null, // resource_path('js/types/dtos.ts')
'packets' => null, // resource_path('js/types/packets.ts')
'barrel' => null, // resource_path('js/types/index.ts')
],
'ts_asset_path' => null, // resource_path('js/utils/DataPacket.ts')
];
bash
php artisan vendor:publish --tag=typewriter-config
bash
php artisan make:packet OrderPacket --data=OrderData