openai-compatible-task-master
Version:
使用MCP解析PRD文档并生成任务列表
86 lines • 2.45 kB
JavaScript
import * as path from 'path';
import fs from 'fs/promises';
/**
* 规范化路径,去除开头的斜杠
* @param filePath 文件路径
* @returns 规范化后的路径
*/
export function normalizePath(filePath) {
return filePath.startsWith('/') ? filePath.substring(1) : filePath;
}
/**
* 构建完整路径
* @param projectDir 项目根目录
* @param relativePath 相对路径
* @returns 完整路径
*/
export function resolveFullPath(projectDir, relativePath) {
// 如果relativePath是绝对路径,直接返回
if (path.isAbsolute(relativePath)) {
return relativePath;
}
// 如果relativePath以./或../开头,或者不包含/,则视为相对路径
if (relativePath.startsWith('./') || relativePath.startsWith('../') || !relativePath.includes('/')) {
const normalizedPath = normalizePath(relativePath);
return path.resolve(projectDir, normalizedPath);
}
// 否则,将其视为相对于项目根目录的路径
const normalizedPath = normalizePath(relativePath);
return path.resolve(projectDir, normalizedPath);
}
/**
* 检查文件是否存在
* @param filePath 文件路径
* @returns 文件是否存在
*/
export async function ensureFileExists(filePath) {
try {
await fs.access(filePath);
return true;
}
catch {
return false;
}
}
/**
* 读取文件内容
* @param filePath 文件路径
* @returns 文件内容
*/
export async function readFileContent(filePath) {
return await fs.readFile(filePath, 'utf8');
}
/**
* 写入文件内容
* @param filePath 文件路径
* @param content 文件内容
*/
export async function writeFileContent(filePath, content) {
await fs.writeFile(filePath, content, 'utf8');
}
/**
* 确保目录存在
* @param dirPath 目录路径
*/
export async function ensureDirectoryExists(dirPath) {
await fs.mkdir(dirPath, { recursive: true });
}
/**
* 读取JSON文件
* @param filePath 文件路径
* @returns JSON对象
*/
export async function readJsonFile(filePath) {
const content = await fs.readFile(filePath, 'utf8');
return JSON.parse(content);
}
/**
* 写入JSON文件
* @param filePath 文件路径
* @param data JSON对象
* @param spaces 缩进空格数
*/
export async function writeJsonFile(filePath, data, spaces = 2) {
await fs.writeFile(filePath, JSON.stringify(data, null, spaces), 'utf8');
}
//# sourceMappingURL=path_util.js.map