( names: readonly string[], wrapper: WrapperLocation | null )
| 314 | * Zen Browser's `zen`. (#126) |
| 315 | */ |
| 316 | export async function removeManagedLinks( |
| 317 | names: readonly string[], |
| 318 | wrapper: WrapperLocation | null |
| 319 | ): Promise<string[]> { |
| 320 | const removed: string[] = [] |
| 321 | for (const dir of candidateDirs()) { |
| 322 | for (const name of names) { |
| 323 | const candidate = path.join(dir, name) |
| 324 | try { |
| 325 | const linkTarget = await fsp.readlink(candidate) |
| 326 | const resolved = path.isAbsolute(linkTarget) |
| 327 | ? linkTarget |
| 328 | : path.resolve(dir, linkTarget) |
| 329 | const byUs = wrapper |
| 330 | ? sameFile(resolved, wrapper.wrapperPath) |
| 331 | : looksLikeOurInstall(resolved) |
| 332 | if (byUs) { |
| 333 | await fsp.rm(candidate, { force: true }) |
| 334 | removed.push(candidate) |
| 335 | } |
| 336 | } catch { |
| 337 | /* not a symlink / missing / unreadable — leave it alone */ |
| 338 | } |
| 339 | } |
| 340 | } |
| 341 | return removed |
| 342 | } |
| 343 | |
| 344 | /* ---------- Install --------------------------------------------------- */ |
| 345 |
no test coverage detected