olivermbs/enumshare 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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

Latest Version on Packagist Tests

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

PHP Enum

↓ Generates ↓

Generated TypeScript

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:export manually.

Testing

composer test

License

MIT

统计信息

  • 总下载量: 8
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-01-08