olivermbs/enumshare
最新稳定版本:v1.0.0
Composer 安装命令:
composer require olivermbs/enumshare
包简介
A Laravel package to export PHP Enums to TypeScript with labels, metadata, and type-safe frontend access
README 文档
README
A Laravel package to export PHP Enums to TypeScript. Simple, type-safe, zero runtime dependencies.
Installation
composer require olivermbs/enumshare
Quick Start
1. Create your enum
<?php namespace App\Enums; use Olivermbs\Enumshare\Attributes\Label; use Olivermbs\Enumshare\Attributes\Meta; enum Status: string { #[Label('Active')] #[Meta(['color' => 'green'])] case Active = 'active'; #[Label('Inactive')] #[Meta(['color' => 'red'])] case Inactive = 'inactive'; }
Any PHP enum can be exported - no trait required.
2. Export
php artisan enums:export
3. Use in TypeScript
import { Status } from '@/Enums/Status'; Status.Active.value // 'active' Status.Active.label // 'Active' Status.Active.meta // { color: 'green' } Status.from('active') // Status.Active entry Status.isValid('active') // true Status.options // [{ value: 'active', label: 'Active' }, ...]
Generated Output
↓ Generates ↓
Output Modes
Configure the output mode in config/enumshare.php:
'mode' => 'full', // or 'minimal'
Full (default)
Includes labels, meta, lookup maps, type guards, and utility methods.
Minimal
Simple output - just values and types (~10 lines per enum):
/* eslint-disable */ // Auto-generated from App\Enums\Status export const Status = { Active: 'active', Inactive: 'inactive', } as const; export type Status = typeof Status[keyof typeof Status];
Configuration
php artisan vendor:publish --tag="enumshare-config"
// config/enumshare.php return [ 'enums' => [ App\Enums\Status::class, ], 'path' => resource_path('js/Enums'), 'mode' => 'full', // 'full' or 'minimal' 'auto_discovery' => true, 'auto_paths' => ['app/Enums'], ];
Commands
php artisan enums:export # Export enums php artisan enums:export --force # Rewrite all, even if unchanged php artisan enums:export --list # List enums that would be exported php artisan enums:export --index # Generate barrel index file php artisan enums:export --types # Export TypeScript helper types php artisan enums:export --path=... # Override export path php artisan enums:export --locale=... # Override locale for labels
Attributes
| Attribute | Description |
|---|---|
#[Label('Text')] |
Static label |
#[TranslatedLabel('key')] |
Translation key |
#[Meta(['key' => 'value'])] |
Metadata |
#[ExportMethod] |
Export method result |
Note: Enums are keyed by short name (class basename). Duplicate names across namespaces will cause a collision error.
Auto-Regeneration with Vite
For automatic regeneration during development, install Laravel Wayfinder:
composer require laravel/wayfinder npm install @laravel/vite-plugin-wayfinder
Then configure Vite to watch your enum files:
// vite.config.js import { wayfinder } from '@laravel/vite-plugin-wayfinder'; export default defineConfig({ plugins: [ wayfinder({ command: 'php artisan enums:export --force', patterns: ['app/Enums/**/*.php', 'lang/**/*.php', 'config/enumshare.php'], }), ], });
Note: Wayfinder is optional - only needed for auto-regeneration. You can always run
php artisan enums:exportmanually.
Testing
composer test
License
MIT
统计信息
- 总下载量: 8
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-01-08

