(entries: TreeEntry[])
| 282 | } |
| 283 | |
| 284 | function buildTree(entries: TreeEntry[]): TreeDir { |
| 285 | const root: TreeDir = { name: '', path: '', dirs: new Map(), files: [] } |
| 286 | for (const entry of entries) { |
| 287 | const segments = entry.path.split('/') |
| 288 | let node = root |
| 289 | for (let i = 0; i < segments.length - 1; i++) { |
| 290 | const seg = segments[i]! |
| 291 | if (!node.dirs.has(seg)) { |
| 292 | node.dirs.set(seg, { |
| 293 | name: seg, |
| 294 | path: node.path ? `${node.path}/${seg}` : seg, |
| 295 | dirs: new Map(), |
| 296 | files: [], |
| 297 | }) |
| 298 | } |
| 299 | node = node.dirs.get(seg)! |
| 300 | } |
| 301 | node.files.push(entry) |
| 302 | } |
| 303 | return compressTree(root) |
| 304 | } |
| 305 | |
| 306 | /** 压缩单链目录:a/b/c 只有一个子目录时合并显示 */ |
| 307 | function compressTree(node: TreeDir): TreeDir { |
no test coverage detected