chore: src/modules/base/service/coding.ts
This commit is contained in:
@@ -0,0 +1,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,
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user