TSMetadataTableGenerater.cs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using System.Text;
  2. namespace etoy
  3. {
  4. class TSMetadataTableGenerater : IGenerater
  5. {
  6. private const string MetadataTypeArea = "<#MetadataTypeArea>";
  7. private const string CLASS_FILE_NAME = "xlsConfig.ts";
  8. public void Generate(Context context)
  9. {
  10. var tables = context.Blackboard.MetadataTables;
  11. var sbMetadataTypes = new StringBuilder();
  12. foreach (var table in tables)
  13. GenSingle(table, context, sbMetadataTypes);
  14. // metadata也写在XlsConfig
  15. var xlsConfigPath = Path.Combine(context.Option.ServerCodeOutput, CLASS_FILE_NAME);
  16. var xlsConfigText = File.ReadAllText(xlsConfigPath);
  17. xlsConfigText = xlsConfigText.Replace(MetadataTypeArea, sbMetadataTypes.ToString());
  18. File.WriteAllText(xlsConfigPath, xlsConfigText, Encoding.UTF8);
  19. }
  20. private void GenSingle(MetadataTable table, Context context, StringBuilder sbMetadataTypes)
  21. {
  22. foreach (var row in table.Rows)
  23. {
  24. var key = row.Struct.StructType;
  25. switch (key)
  26. {
  27. case MetadataStructType.Struct:
  28. GenStruct(row, sbMetadataTypes);
  29. break;
  30. case MetadataStructType.Enum:
  31. GenEnum(row, sbMetadataTypes);
  32. break;
  33. }
  34. }
  35. }
  36. private void GenStruct(MetadataRow row, StringBuilder sbMetadataTypes)
  37. {
  38. sbMetadataTypes.AppendLine($"export interface {row.Struct.Name} {{");
  39. // 属性定义
  40. foreach (var field in row.Struct.Fields)
  41. {
  42. var fieldType = field.FieldType.ToTSFieldType();// isContainsMetadataType ? $"{field.FieldType}" : field.FieldType;
  43. var fieldName = field.Name;
  44. if (field.StructRepeated)
  45. {// 数组
  46. sbMetadataTypes.AppendLine($" {fieldName}: {fieldType}[];");
  47. }
  48. else
  49. { // 字段
  50. sbMetadataTypes.AppendLine($" {fieldName}: {fieldType};");
  51. }
  52. }
  53. sbMetadataTypes.Append("}\n");
  54. }
  55. private void GenEnum(MetadataRow row, StringBuilder sbMetadataTypes)
  56. {
  57. sbMetadataTypes.Append($"export enum {row.Struct.Name} {{ ");
  58. foreach (var field in row.Struct.Fields)
  59. {
  60. if (string.IsNullOrEmpty(field.EnumValue))
  61. sbMetadataTypes.Append($"{field.Name}, ");
  62. else
  63. sbMetadataTypes.Append($"{field.Name} = {field.EnumValue}, ");
  64. }
  65. sbMetadataTypes.Append("}\n");
  66. }
  67. }
  68. }