(targetPath, projectRoot)
| 213 | } |
| 214 | |
| 215 | export function validateDeletionPath(targetPath, projectRoot) { |
| 216 | const normalizedTarget = path.normalize(targetPath) |
| 217 | const normalizedRoot = path.normalize(projectRoot) |
| 218 | |
| 219 | if (!normalizedTarget.startsWith(normalizedRoot)) { |
| 220 | return { |
| 221 | valid: false, |
| 222 | error: '路径超出项目根目录范围' |
| 223 | } |
| 224 | } |
| 225 | |
| 226 | if (normalizedTarget === normalizedRoot) { |
| 227 | return { |
| 228 | valid: false, |
| 229 | error: '不能删除项目根目录' |
| 230 | } |
| 231 | } |
| 232 | |
| 233 | const pathSegments = normalizedTarget.split(path.sep) |
| 234 | if (pathSegments.length < 3) { |
| 235 | return { |
| 236 | valid: false, |
| 237 | error: '路径层级太浅 (安全检查失败)' |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | return { valid: true, error: null } |
| 242 | } |
| 243 | |
| 244 | export function safeRemoveDirectory(dirPath, projectRoot) { |
| 245 | const validation = validateDeletionPath(dirPath, projectRoot) |
no outgoing calls
no test coverage detected