123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- using System.Text;
- namespace etoy
- {
- class TSMetadataTableGenerater : IGenerater
- {
- private const string MetadataTypeArea = "<#MetadataTypeArea>";
- private const string CLASS_FILE_NAME = "xlsConfig.ts";
- public void Generate(Context context)
- {
- var tables = context.Blackboard.MetadataTables;
- var sbMetadataTypes = new StringBuilder();
- foreach (var table in tables)
- GenSingle(table, context, sbMetadataTypes);
- // metadata也写在XlsConfig
- var xlsConfigPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME);
- var xlsConfigText = File.ReadAllText(xlsConfigPath);
- xlsConfigText = xlsConfigText.Replace(MetadataTypeArea, sbMetadataTypes.ToString());
- File.WriteAllText(xlsConfigPath, xlsConfigText, Encoding.UTF8);
- }
- private void GenSingle(MetadataTable table, Context context, StringBuilder sbMetadataTypes)
- {
- foreach (var row in table.Rows)
- {
- var key = row.Struct.StructType;
- switch (key)
- {
- case MetadataStructType.Struct:
- GenStruct(row, sbMetadataTypes);
- break;
- case MetadataStructType.Enum:
- GenEnum(row, sbMetadataTypes);
- break;
- }
- }
- }
- private void GenStruct(MetadataRow row, StringBuilder sbMetadataTypes)
- {
- sbMetadataTypes.AppendLine($"export interface {row.Struct.Name} {{");
- // 属性定义
- foreach (var field in row.Struct.Fields)
- {
- var fieldType = field.FieldType.ToTSFieldType();// isContainsMetadataType ? $"{field.FieldType}" : field.FieldType;
- var fieldName = field.Name;
- if (field.StructRepeated)
- {// 数组
- sbMetadataTypes.AppendLine($" {fieldName}: {fieldType}[];");
- }
- else
- { // 字段
- sbMetadataTypes.AppendLine($" {fieldName}: {fieldType};");
- }
- }
- sbMetadataTypes.Append("}\n");
- }
- private void GenEnum(MetadataRow row, StringBuilder sbMetadataTypes)
- {
- sbMetadataTypes.Append($"export enum {row.Struct.Name} {{ ");
- foreach (var field in row.Struct.Fields)
- {
- if (string.IsNullOrEmpty(field.EnumValue))
- sbMetadataTypes.Append($"{field.Name}, ");
- else
- sbMetadataTypes.Append($"{field.Name} = {field.EnumValue}, ");
- }
- sbMetadataTypes.Append("}\n");
- }
- }
- }
|