import { existsSync, lstatSync, unlinkSync, readlinkSync } from 'fs'; import { resolve } from 'path'; const manifest = await Bun.file('manifest.json').json(); const pluginId: string = manifest.id; const vaultPath = process.argv[2] || process.env.OBSIDIAN_VAULT; if (!vaultPath) { console.error( 'Usage: bun run scripts/unlink-from-vault.ts \n' + ' or set OBSIDIAN_VAULT environment variable', ); process.exit(1); } const resolvedVault = resolve(vaultPath); const pluginsDir = resolve(resolvedVault, '.obsidian', 'plugins'); const targetDir = resolve(pluginsDir, pluginId); const distDir = resolve(import.meta.dir, '..', 'dist'); if (!existsSync(targetDir)) { console.log(`Symlink not found: ${targetDir} does not exist`); process.exit(0); } if (!lstatSync(targetDir).isSymbolicLink()) { console.error(`${targetDir} is not a symlink. Use 'vault:uninstall' instead.`); process.exit(1); } const linkTarget = readlinkSync(targetDir); const resolvedLinkTarget = resolve(pluginsDir, linkTarget); if (resolvedLinkTarget !== distDir) { console.error(`Refusing to remove for safety: symlink points to ${resolvedLinkTarget}, not ${distDir}`); process.exit(1); } unlinkSync(targetDir); console.log(`Removed symlink: ${targetDir}`);