( projects: Project[], )
| 16 | } |
| 17 | |
| 18 | function disambiguateDuplicateProjectNames<Project extends { id: string; name: string }>( |
| 19 | projects: Project[], |
| 20 | ) { |
| 21 | const projectsByName = new Map<string, Project[]>() |
| 22 | |
| 23 | for (const project of projects) { |
| 24 | const normalizedName = project.name.trim().toLowerCase() |
| 25 | projectsByName.set(normalizedName, [...(projectsByName.get(normalizedName) ?? []), project]) |
| 26 | } |
| 27 | |
| 28 | return projects.map((project) => { |
| 29 | const duplicateProjects = projectsByName.get(project.name.trim().toLowerCase()) |
| 30 | if (!duplicateProjects || duplicateProjects.length <= 1) { |
| 31 | return project |
| 32 | } |
| 33 | |
| 34 | return { |
| 35 | ...project, |
| 36 | name: `${project.name} · ${getProjectNameQualifier(project.id)}`, |
| 37 | } |
| 38 | }) |
| 39 | } |
| 40 | |
| 41 | function getSessionStorage(cwd: string): Promise<SessionStorage> { |
| 42 | return invokeRuntimeHost('getPiSessionStorage', { projectPath: cwd }) |
no test coverage detected