Files
wwjcloud-nest-v1/tools-v1/php-tools/generators/dict-generator.js
wanwujie b5826ee469 feat: 发布 v1 智能框架 0.1.0 版本
🚀 新增功能:
- wwjcloud-nest-v1: 完整的 NestJS 智能框架
- AI 自愈机制: @wwjcloud/auto-healing 模块
- 智能代码生成: tools-v1/php-tools 迁移工具链
- AI 能力规划: v1/docs/AI-CAPABILITY-ROADMAP.md

📦 核心模块:
- libs/wwjcloud-ai: AI 策略和恢复服务
- libs/wwjcloud-boot: 启动和配置管理
- libs/wwjcloud-core: 核心基础设施
- libs/wwjcloud-addon: 插件系统

🏗️ 架构特性:
- 分层渐进式 AI 策略
- 微服务导向的模块化设计
- 与 PHP 项目 100% 业务一致性
- Docker 容器化部署支持

📋 版本信息:
- 版本: v0.1.0
- 发布日期: 2025-01-25
- 分支: v1
2025-10-19 19:55:52 +08:00

265 lines
6.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const BaseGenerator = require('./base-generator');
/**
* 📚 字典生成器
*/
class DictGenerator extends BaseGenerator {
constructor() {
super('DictGenerator');
this.config = {
phpBasePath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/niucloud-php/niucloud',
nestjsBasePath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/wwjcloud-nest-v1/libs/wwjcloud-core/src',
discoveryResultPath: '/Users/wanwu/Documents/wwjcloud/wwjcloud-nsetjs/tools-v1/php-tools/php-discovery-result.json'
};
this.discoveryData = null;
this.dictStats = { dictsCreated: 0, dictsSkipped: 0 };
}
/**
* 运行字典生成
*/
async run() {
try {
console.log('📚 启动字典生成器...');
console.log('目标生成NestJS字典/枚举文件\n');
// 加载PHP文件发现结果
await this.loadDiscoveryData();
// 生成字典
await this.generateDicts();
// 输出统计报告
this.printStats();
} catch (error) {
console.error('❌ 字典生成失败:', error);
this.stats.errors++;
}
}
/**
* 加载PHP文件发现结果
*/
async loadDiscoveryData() {
try {
const data = fs.readFileSync(this.config.discoveryResultPath, 'utf8');
this.discoveryData = JSON.parse(data);
console.log(' ✅ 成功加载PHP文件发现结果');
} catch (error) {
console.error('❌ 加载发现结果失败:', error);
throw error;
}
}
/**
* 生成字典
*/
async generateDicts() {
console.log(' 🔨 生成字典...');
for (const [moduleName, dicts] of Object.entries(this.discoveryData.dicts)) {
for (const [dictName, dictInfo] of Object.entries(dicts)) {
await this.createDict(moduleName, dictName, dictInfo);
this.stats.dictsCreated++;
}
}
console.log(` ✅ 生成了 ${this.stats.dictsCreated} 个字典`);
}
/**
* 创建字典
*/
async createDict(moduleName, dictName, dictInfo) {
// 使用 kebab-case 文件名,避免重叠名问题
// 例如: dict → dict.enum.ts (而不是 DictDict.ts)
const kebabName = this.toKebabCase(dictName);
const dictPath = path.join(
this.config.nestjsBasePath,
moduleName,
'enums',
`${kebabName}.enum.ts` // ✅ kebab-case + .enum.ts 后缀
);
const content = this.generateDictContent(moduleName, dictName);
const success = this.writeFile(dictPath, content, `Enum for ${moduleName}/${dictName}`);
if (success) {
this.dictStats.dictsCreated++;
} else {
this.dictStats.dictsSkipped++;
}
}
/**
* 生成字典内容
*/
generateDictContent(moduleName, dictName) {
// 避免重叠名: Dict → DictEnum (而不是 DictDict)
const pascalName = this.toPascalCase(dictName);
const className = `${pascalName}Enum`; // ✅ 例如: DictEnum, MemberEnum
const dictVarName = `${this.toCamelCase(dictName)}Dict`; // ✅ 例如: dictDict, memberDict
const content = `/**
* ${dictName} 枚举
* 定义相关的常量值
*/
export enum ${className} {
// 状态枚举
STATUS_ACTIVE = 'active',
STATUS_INACTIVE = 'inactive',
STATUS_PENDING = 'pending',
STATUS_DELETED = 'deleted',
// 类型枚举
TYPE_NORMAL = 'normal',
TYPE_PREMIUM = 'premium',
TYPE_VIP = 'vip',
// 级别枚举
LEVEL_LOW = 1,
LEVEL_MEDIUM = 2,
LEVEL_HIGH = 3,
LEVEL_CRITICAL = 4,
}
/**
* ${dictName} 字典映射
*/
export const ${dictVarName} = {
// 状态映射
status: {
[${className}.STATUS_ACTIVE]: '激活',
[${className}.STATUS_INACTIVE]: '未激活',
[${className}.STATUS_PENDING]: '待处理',
[${className}.STATUS_DELETED]: '已删除',
},
// 类型映射
type: {
[${className}.TYPE_NORMAL]: '普通',
[${className}.TYPE_PREMIUM]: '高级',
[${className}.TYPE_VIP]: 'VIP',
},
// 级别映射
level: {
[${className}.LEVEL_LOW]: '低',
[${className}.LEVEL_MEDIUM]: '中',
[${className}.LEVEL_HIGH]: '高',
[${className}.LEVEL_CRITICAL]: '紧急',
},
} as const;
/**
* ${dictName} 工具类
*/
export class ${className}Util {
/**
* 获取状态文本
*/
static getStatusText(status: ${className}): string {
return (${dictVarName}.status as any)[status] || '未知';
}
/**
* 获取类型文本
*/
static getTypeText(type: ${className}): string {
return (${dictVarName}.type as any)[type] || '未知';
}
/**
* 获取级别文本
*/
static getLevelText(level: ${className}): string {
return (${dictVarName}.level as any)[level] || '未知';
}
/**
* 获取所有状态选项
*/
static getStatusOptions(): Array<{ value: string; label: string }> {
return Object.entries(${dictVarName}.status).map(([value, label]) => ({
value,
label: label as string,
}));
}
/**
* 获取所有类型选项
*/
static getTypeOptions(): Array<{ value: string; label: string }> {
return Object.entries(${dictVarName}.type).map(([value, label]) => ({
value,
label: label as string,
}));
}
/**
* 获取所有级别选项
*/
static getLevelOptions(): Array<{ value: number; label: string }> {
return Object.entries(${dictVarName}.level).map(([value, label]) => ({
value: Number(value),
label: label as string,
}));
}
/**
* 验证状态值
*/
static isValidStatus(status: string): boolean {
return Object.values(${className}).includes(status as ${className});
}
/**
* 验证类型值
*/
static isValidType(type: string): boolean {
return Object.values(${className}).includes(type as ${className});
}
/**
* 验证级别值
*/
static isValidLevel(level: number): boolean {
return Object.values(${className}).includes(level as ${className});
}
}
/**
* ${dictName} 类型定义
*/
export type ${className}Status = keyof typeof ${dictVarName}.status;
export type ${className}Type = keyof typeof ${dictVarName}.type;
export type ${className}Level = keyof typeof ${dictVarName}.level;`;
return content;
}
/**
* 输出统计报告
*/
printStats() {
super.printStats({
'Dicts Created': this.dictStats.dictsCreated,
'Dicts Skipped': this.dictStats.dictsSkipped
});
}
}
// 如果直接运行此文件
if (require.main === module) {
const generator = new DictGenerator();
generator.run().catch(console.error);
}
module.exports = DictGenerator;