wangzhibo
6 天以前 7dcc2997614f849258091f5d66e648317a40d323
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { App, IMidwayApplication, Init, Inject, Provide } from '@midwayjs/core';
import { BaseService } from '@cool-midway/core';
import * as fs from 'fs';
import * as path from 'path';
 
/**
 * Ai编码
 */
@Provide()
export class BaseCodingService extends BaseService {
  @App()
  app: IMidwayApplication;
 
  /**
   * 获得模块目录结构
   */
  async getModuleTree() {
    if (this.app.getEnv() !== 'local') {
      return [];
    }
 
    const moduleDir = await this.app.getBaseDir();
    const modulesPath = path.join(moduleDir, 'modules');
    // 返回modules下有多少个模块
    const modules = fs.readdirSync(modulesPath);
    return modules.filter(module => module !== '.DS_Store');
  }
 
  /**
   * 创建代码
   * @param codes 代码
   */
  async createCode(
    codes: {
      path: string;
      content: string;
    }[]
  ) {
    if (this.app.getEnv() !== 'local') {
      throw new Error('只能在开发环境下创建代码');
    }
 
    const moduleDir = this.app.getAppDir();
 
    for (const code of codes) {
      // 格式化代码内容
      const formattedContent = await this.formatContent(code.content);
 
      // 获取完整的文件路径
      const filePath = path.join(moduleDir, code.path);
 
      // 确保目录存在
      const dirPath = path.dirname(filePath);
      if (!fs.existsSync(dirPath)) {
        fs.mkdirSync(dirPath, { recursive: true });
      }
 
      // 写入文件
      fs.writeFileSync(filePath, formattedContent, 'utf8');
    }
  }
 
  /**
   * 格式化内容
   * @param content
   */
  async formatContent(content: string) {
    // 使用prettier格式化内容
    const prettier = require('prettier');
    return prettier.format(content, {
      parser: 'typescript',
      singleQuote: true,
      trailingComma: 'all',
      bracketSpacing: true,
      arrowParens: 'avoid',
      printWidth: 80,
    });
  }
}