import { existsSync, lstatSync, symlinkSync, unlinkSync } 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/symlink-to-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(pluginsDir)) { console.error(`Invalid vault path: ${resolvedVault}`); console.error(`.obsidian/plugins directory not found at ${pluginsDir}`); process.exit(1); } if (!existsSync(distDir)) { console.error(`Build not found: run 'bun run build' first`); process.exit(1); } if (existsSync(targetDir)) { if (lstatSync(targetDir).isSymbolicLink()) { const link = lstatSync(targetDir); const linkTarget = resolve(pluginsDir, link.path); if (linkTarget !== distDir) { unlinkSync(targetDir); symlinkSync(distDir, targetDir); console.log(`Updated symlink: ${targetDir} -> ${distDir}`); } else { console.log(`Symlink already correct: ${targetDir} -> ${distDir}`); } } else { console.error(`${targetDir} exists and is not a symlink. Refusing to remove for safety.`); process.exit(1); } } else { symlinkSync(distDir, targetDir); console.log(`Created symlink: ${targetDir} -> ${distDir}`); }